소스 동기화

This commit is contained in:
JSYOO 2021-07-21 09:36:41 +09:00
commit 5c1609ea87
72 changed files with 36780 additions and 1475 deletions

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- uac.service.board.qna_GET.xml -->
<result>
<code>S</code>
<message>성공적으로 조회되었습니다.</message>
<records>10</records>
<page>1</page>
<totPages>15</totPages>
<record>
<noticeNo>1</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>2</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>3</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>4</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>5</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>6</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>7</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>8</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>9</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>10</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>11</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
<record>
<noticeNo>12</noticeNo>
<noticeType>101</noticeType>
<title>공지사항 테스트</title>
<readCount>55</readCount>
<regDate>2021-07-19</regDate>
</record>
</result>

774
pom.xml
View File

@ -1,387 +1,387 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nlib</groupId>
<artifactId>nlib</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>nlib</name>
<url>http://www.egovframe.go.kr</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<properties>
<spring.maven.artifact.version>4.3.16.RELEASE</spring.maven.artifact.version>
<egovframework.rte.version>3.8.0</egovframework.rte.version>
<spring-security.version>4.2.5.RELEASE</spring-security.version>
</properties>
<repositories>
<repository>
<id>mvn2</id>
<url>http://repo1.maven.org/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>egovframe</id>
<url>http://www.egovframe.go.kr/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>egovframe2</id>
<url>http://maven.egovframe.kr:8080/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<!-- 표준프레임워크 실행환경 -->
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.ptl.mvc</artifactId>
<version>${egovframework.rte.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.psl.dataaccess</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.idgnr</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.property</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.crypto</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<!-- fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
<!-- <exclusions>
<exclusion>
<artifactId>commons-io</artifactId>
<groupId>commons-io</groupId>
</exclusion>
</exclusions> -->
</dependency>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring-security.version}</version>
</dependency>
<!-- 요소기술 달력을 위한 라이브러리 -->
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>53.1</version>
</dependency>
<!-- XML-Map 변환 기능을 위한 추가 (DIGITALSHIP KNKIM 2021.06.15)-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.4</version>
</dependency>
<!-- XML/자바객체 변환 (DIGITALSHIP KNKIM 2021.06.21)-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version>
</dependency>
<!-- 바코드 ZXing (DIGITALSHIP KNKIM 2021.06.25)-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
<!-- Tiles (DIGITALSHIP KNKIM 2021.07.06)-->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
<!-- AJAX JSON (DIGITALSHIP KNKIM 2021.07.15)-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.4</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/</path>
<systemProperties>
<JAVA_OPTS>-Xms256m -Xmx768m -XX:MaxPermSize=256m</JAVA_OPTS>
</systemProperties>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<components>
<component>
<name>hbm2ddl</name>
<implementation>annotationconfiguration</implementation>
</component>
</components>
</configuration>
<dependencies>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies>
</plugin>
<!-- EMMA -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<version>1.0-alpha-3</version>
</plugin>
<!-- PMD manven plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- EMMA -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
<forkMode>once</forkMode>
<reportFormat>xml</reportFormat>
<excludes>
<exclude>**/Abstract*.java</exclude>
<exclude>**/*Suite.java</exclude>
</excludes>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited>
</plugin>
<!-- JavaDoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
</plugin>
</plugins>
</build>
<reporting>
<outputDirectory>${basedir}/target/site</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version>
<reportSets>
<reportSet>
<id>sunlink</id>
<reports>
<report>javadoc</report>
</reports>
<inherited>true</inherited>
<configuration>
<links>
<link>http://docs.oracle.com/javase/6/docs/api/</link>
</links>
</configuration>
</reportSet>
</reportSets>
</plugin>
<!-- JUnit Test Results & EMMA Coverage Reporting -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>surefire-report-maven-plugin</artifactId>
<inherited>true</inherited>
<reportSets>
<reportSet>
<reports>
<report>report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- Generating JavaDoc Report -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<minmemory>128m</minmemory>
<maxmemory>512m</maxmemory>
<encoding>${encoding}</encoding>
<docencoding>${encoding}</docencoding>
<charset>${encoding}</charset>
</configuration>
</plugin>
<!-- Generating Java Source in HTML -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<configuration>
<inputEncoding>${encoding}</inputEncoding>
<outputEncoding>${encoding}</outputEncoding>
<linkJavadoc>true</linkJavadoc>
<javadocDir>apidocs</javadocDir>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nlib</groupId>
<artifactId>nlib</artifactId>
<packaging>war</packaging>
<version>1.0.0</version>
<name>nlib</name>
<url>http://www.egovframe.go.kr</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<properties>
<spring.maven.artifact.version>4.3.16.RELEASE</spring.maven.artifact.version>
<egovframework.rte.version>3.8.0</egovframework.rte.version>
<spring-security.version>4.2.5.RELEASE</spring-security.version>
</properties>
<repositories>
<repository>
<id>mvn2</id>
<url>http://repo1.maven.org/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>egovframe</id>
<url>http://www.egovframe.go.kr/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>egovframe2</id>
<url>http://maven.egovframe.kr:8080/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<!-- 표준프레임워크 실행환경 -->
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.ptl.mvc</artifactId>
<version>${egovframework.rte.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.psl.dataaccess</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.idgnr</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.property</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.crypto</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<!-- fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
<!-- <exclusions>
<exclusion>
<artifactId>commons-io</artifactId>
<groupId>commons-io</groupId>
</exclusion>
</exclusions> -->
</dependency>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring-security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring-security.version}</version>
</dependency>
<!-- 요소기술 달력을 위한 라이브러리 -->
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>53.1</version>
</dependency>
<!-- XML-Map 변환 기능을 위한 추가 (DIGITALSHIP KNKIM 2021.06.15)-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.4</version>
</dependency>
<!-- XML/자바객체 변환 (DIGITALSHIP KNKIM 2021.06.21)-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version>
</dependency>
<!-- 바코드 ZXing (DIGITALSHIP KNKIM 2021.06.25)-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
<!-- Tiles (DIGITALSHIP KNKIM 2021.07.06)-->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
<!-- AJAX JSON (DIGITALSHIP KNKIM 2021.07.15)-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.4</version>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/</path>
<systemProperties>
<JAVA_OPTS>-Xms256m -Xmx768m -XX:MaxPermSize=256m</JAVA_OPTS>
</systemProperties>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<components>
<component>
<name>hbm2ddl</name>
<implementation>annotationconfiguration</implementation>
</component>
</components>
</configuration>
<dependencies>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies>
</plugin>
<!-- EMMA -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<version>1.0-alpha-3</version>
</plugin>
<!-- PMD manven plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- EMMA -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
<forkMode>once</forkMode>
<reportFormat>xml</reportFormat>
<excludes>
<exclude>**/Abstract*.java</exclude>
<exclude>**/*Suite.java</exclude>
</excludes>
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited>
</plugin>
<!-- JavaDoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
</plugin>
</plugins>
</build>
<reporting>
<outputDirectory>${basedir}/target/site</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version>
<reportSets>
<reportSet>
<id>sunlink</id>
<reports>
<report>javadoc</report>
</reports>
<inherited>true</inherited>
<configuration>
<links>
<link>http://docs.oracle.com/javase/6/docs/api/</link>
</links>
</configuration>
</reportSet>
</reportSets>
</plugin>
<!-- JUnit Test Results & EMMA Coverage Reporting -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>surefire-report-maven-plugin</artifactId>
<inherited>true</inherited>
<reportSets>
<reportSet>
<reports>
<report>report-only</report>
</reports>
</reportSet>
</reportSets>
</plugin>
<!-- Generating JavaDoc Report -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<minmemory>128m</minmemory>
<maxmemory>512m</maxmemory>
<encoding>${encoding}</encoding>
<docencoding>${encoding}</docencoding>
<charset>${encoding}</charset>
</configuration>
</plugin>
<!-- Generating Java Source in HTML -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<configuration>
<inputEncoding>${encoding}</inputEncoding>
<outputEncoding>${encoding}</outputEncoding>
<linkJavadoc>true</linkJavadoc>
<javadocDir>apidocs</javadocDir>
</configuration>
</plugin>
</plugins>
</reporting>
</project>

View File

@ -0,0 +1,222 @@
package egovframework.com.cmm.service;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import egovframework.com.cmm.EgovWebUtil;
import egovframework.com.cmm.util.EgovResourceCloseHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Class Name : EgovProperties.java
* Description : properties값들을 파일로부터 읽어와 Globals클래스의 정적변수로 로드시켜주는 클래스로
* 문자열 정보 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 있도록 한다.
* Modification Information
*
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2009.01.19 박지욱 최초 생성
* 2011.07.20 서준식 Globals파일의 상대경로를 읽은 메서드 추가
* 2014.10.13 이기하 Globals.properties 값이 null일 경우 오류처리
* 2019.04.26 신용호 RELATIVE_PATH_PREFIX Path 적용 방식 개선
* @author 공통 서비스 개발팀 박지욱
* @since 2009. 01. 19
* @version 1.0
* @see
*
*/
public class EgovProperties {
private static final Logger LOGGER = LoggerFactory.getLogger(EgovProperties.class);
//파일구분자
final static String FILE_SEPARATOR = System.getProperty("file.separator");
//프로퍼티 파일의 물리적 위치
//public static final String GLOBALS_PROPERTIES_FILE = System.getProperty("user.home") + FILE_SEPARATOR + "egovProps" +FILE_SEPARATOR + "globals.properties";
public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath().substring(0, EgovProperties.class.getResource("").getPath().lastIndexOf("com"));
//public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getProtectionDomain().getCodeSource().getLocation().getPath().substring(0,EgovProperties.class.getProtectionDomain().getCodeSource().getLocation().getPath().indexOf("WEB-INF/classes/")+"WEB-INF/classes/".length())+"egovframework/";
public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "egovProps" + FILE_SEPARATOR + "globals.properties";
/**
* 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용)
* @param keyName String
* @return String
*/
public static String getPathProperty(String keyName) {
String value = "";
LOGGER.debug("getPathProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName);
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE));
props.load(new BufferedInputStream(fis));
value = props.getProperty(keyName);
value = (value == null) ? "" : value.trim();//KISA 보안약점 조치 (2018-10-29, 윤창원)
value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value;
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
EgovResourceCloseHelper.close(fis);
}
return value;
}
/**
* 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용)
* @param keyName String
* @return String
*/
public static String getProperty(String keyName) {
String value = "";
LOGGER.debug("===>>> getProperty"+EgovProperties.class.getProtectionDomain().getCodeSource().getLocation().getPath());
LOGGER.debug("getProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName);
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(EgovWebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE));
props.load(new BufferedInputStream(fis));
if (props.getProperty(keyName) == null) {
return "";
}
value = props.getProperty(keyName).trim();
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
EgovResourceCloseHelper.close(fis);
}
return value;
}
/**
* 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다
* @param fileName String
* @param key String
* @return String
*/
public static String getPathProperty(String fileName, String key) {
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(EgovWebUtil.filePathBlackList(fileName));
props.load(new BufferedInputStream(fis));
fis.close();
String value = props.getProperty(key);
value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value;
return value;
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
EgovResourceCloseHelper.close(fis);
}
}
/**
* 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다
* @param fileName String
* @param key String
* @return String
*/
public static String getProperty(String fileName, String key) {
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(EgovWebUtil.filePathBlackList(fileName));
props.load(new BufferedInputStream(fis));
fis.close();
String value = props.getProperty(key);
return value;
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
EgovResourceCloseHelper.close(fis);
}
}
/**
* 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다.
* @param property String
* @return ArrayList
*/
public static ArrayList<Map<String, String>> loadPropertyFile(String property) {
// key - value 형태로 배열 결과
ArrayList<Map<String, String>> keyList = new ArrayList<Map<String, String>>();
String src = property.replace('\\', File.separatorChar).replace('/', File.separatorChar);
FileInputStream fis = null;
try {
File srcFile = new File(EgovWebUtil.filePathBlackList(src));
if (srcFile.exists()) {
Properties props = new Properties();
fis = new FileInputStream(src);
props.load(new BufferedInputStream(fis));
fis.close();
Enumeration<?> plist = props.propertyNames();
if (plist != null) {
while (plist.hasMoreElements()) {
Map<String, String> map = new HashMap<String, String>();
String key = (String) plist.nextElement();
map.put(key, props.getProperty(key));
keyList.add(map);
}
}
}
} catch (IOException ex) {
LOGGER.debug("IO Exception", ex);
throw new RuntimeException(ex);
} finally {
EgovResourceCloseHelper.close(fis);
}
return keyList;
}
}

View File

@ -0,0 +1,240 @@
package egovframework.com.cmm.service;
import java.io.Serializable;
import org.apache.commons.lang3.builder.ToStringBuilder;
/**
* @Class Name : FileVO.java
* @Description : 파일정보 처리를 위한 VO 클래스
* @Modification Information
*
* 수정일 수정자 수정내용
* ------- ------- -------------------
* 2009. 3. 25. 이삼섭
*
* @author 공통 서비스 개발팀 이삼섭
* @since 2009. 3. 25.
* @version
* @see
*
*/
@SuppressWarnings("serial")
public class FileVO implements Serializable {
/**
* 첨부파일 아이디
*/
public String atchFileId = "";
/**
* 생성일자
*/
public String creatDt = "";
/**
* 파일내용
*/
public String fileCn = "";
/**
* 파일확장자
*/
public String fileExtsn = "";
/**
* 파일크기
*/
public String fileMg = "";
/**
* 파일연번
*/
public String fileSn = "";
/**
* 파일저장경로
*/
public String fileStreCours = "";
/**
* 원파일명
*/
public String orignlFileNm = "";
/**
* 저장파일명
*/
public String streFileNm = "";
/**
* atchFileId attribute를 리턴한다.
*
* @return the atchFileId
*/
public String getAtchFileId() {
return atchFileId;
}
/**
* atchFileId attribute 값을 설정한다.
*
* @param atchFileId
* the atchFileId to set
*/
public void setAtchFileId(String atchFileId) {
this.atchFileId = atchFileId;
}
/**
* creatDt attribute를 리턴한다.
*
* @return the creatDt
*/
public String getCreatDt() {
return creatDt;
}
/**
* creatDt attribute 값을 설정한다.
*
* @param creatDt
* the creatDt to set
*/
public void setCreatDt(String creatDt) {
this.creatDt = creatDt;
}
/**
* fileCn attribute를 리턴한다.
*
* @return the fileCn
*/
public String getFileCn() {
return fileCn;
}
/**
* fileCn attribute 값을 설정한다.
*
* @param fileCn
* the fileCn to set
*/
public void setFileCn(String fileCn) {
this.fileCn = fileCn;
}
/**
* fileExtsn attribute를 리턴한다.
*
* @return the fileExtsn
*/
public String getFileExtsn() {
return fileExtsn;
}
/**
* fileExtsn attribute 값을 설정한다.
*
* @param fileExtsn
* the fileExtsn to set
*/
public void setFileExtsn(String fileExtsn) {
this.fileExtsn = fileExtsn;
}
/**
* fileMg attribute를 리턴한다.
*
* @return the fileMg
*/
public String getFileMg() {
return fileMg;
}
/**
* fileMg attribute 값을 설정한다.
*
* @param fileMg
* the fileMg to set
*/
public void setFileMg(String fileMg) {
this.fileMg = fileMg;
}
/**
* fileSn attribute를 리턴한다.
*
* @return the fileSn
*/
public String getFileSn() {
return fileSn;
}
/**
* fileSn attribute 값을 설정한다.
*
* @param fileSn
* the fileSn to set
*/
public void setFileSn(String fileSn) {
this.fileSn = fileSn;
}
/**
* fileStreCours attribute를 리턴한다.
*
* @return the fileStreCours
*/
public String getFileStreCours() {
return fileStreCours;
}
/**
* fileStreCours attribute 값을 설정한다.
*
* @param fileStreCours
* the fileStreCours to set
*/
public void setFileStreCours(String fileStreCours) {
this.fileStreCours = fileStreCours;
}
/**
* orignlFileNm attribute를 리턴한다.
*
* @return the orignlFileNm
*/
public String getOrignlFileNm() {
return orignlFileNm;
}
/**
* orignlFileNm attribute 값을 설정한다.
*
* @param orignlFileNm
* the orignlFileNm to set
*/
public void setOrignlFileNm(String orignlFileNm) {
this.orignlFileNm = orignlFileNm;
}
/**
* streFileNm attribute를 리턴한다.
*
* @return the streFileNm
*/
public String getStreFileNm() {
return streFileNm;
}
/**
* streFileNm attribute 값을 설정한다.
*
* @param streFileNm
* the streFileNm to set
*/
public void setStreFileNm(String streFileNm) {
this.streFileNm = streFileNm;
}
/**
* toString 메소드를 대치한다.
*/
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}

View File

@ -0,0 +1,58 @@
package egovframework.com.cmm.service;
/**
* Class Name : Globals.java
* Description : 시스템 구동 프로퍼티를 통해 사용될 전역변수를 정의한다.
* Modification Information
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2009.01.19 박지욱 최초 생성
*
* @author 공통 서비스 개발팀 박지욱
* @since 2009. 01. 19
* @version 1.0
* @see
*
*/
public class Globals {
//OS 유형
public static final String OS_TYPE = EgovProperties.getProperty("Globals.OsType");
//DB 유형
public static final String DB_TYPE = EgovProperties.getProperty("Globals.DbType");
//메인 페이지
public static final String MAIN_PAGE = EgovProperties.getProperty("Globals.MainPage");
//ShellFile 경로
public static final String SHELL_FILE_PATH = EgovProperties.getPathProperty("Globals.ShellFilePath");
//퍼로퍼티 파일 위치
public static final String CONF_PATH = EgovProperties.getPathProperty("Globals.ConfPath");
//Server정보 프로퍼티 위치
public static final String SERVER_CONF_PATH = EgovProperties.getPathProperty("Globals.ServerConfPath");
//Client정보 프로퍼티 위치
public static final String CLIENT_CONF_PATH = EgovProperties.getPathProperty("Globals.ClientConfPath");
//파일포맷 정보 프로퍼티 위치
public static final String FILE_FORMAT_PATH = EgovProperties.getPathProperty("Globals.FileFormatPath");
//파일 업로드 파일명
public static final String ORIGIN_FILE_NM = "originalFileName";
//파일 확장자
public static final String FILE_EXT = "fileExtension";
//파일크기
public static final String FILE_SIZE = "fileSize";
//업로드된 파일명
public static final String UPLOAD_FILE_NM = "uploadFileName";
//파일경로
public static final String FILE_PATH = "filePath";
//메일발송요청 XML파일경로
public static final String MAIL_REQUEST_PATH = EgovProperties.getPathProperty("Globals.MailRequestPath");
//메일발송응답 XML파일경로
public static final String MAIL_RESPONSE_PATH = EgovProperties.getPathProperty("Globals.MailRResponsePath");
// G4C 연결용 IP (localhost)
public static final String LOCAL_IP = EgovProperties.getProperty("Globals.LocalIp");
}

View File

@ -1,28 +1,56 @@
package nlib.bbs.service;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
public interface BoardService
{
public DataApiResVO listNotices(DataApiReqVO reqVO);
public DataApiResVO selectNotice(DataApiReqVO reqVO);
public DataApiResVO listFAQs(DataApiReqVO reqVO);
public DataApiResVO listQnAs(DataApiReqVO reqVO);
public DataApiResVO selectQnA(DataApiReqVO reqVO);
public DataApiResVO insertQnA(DataApiReqVO reqVO);
public DataApiResVO verifyWriter(DataApiReqVO reqVO);
public DataApiResVO updateQnA(DataApiReqVO reqVO);
public DataApiResVO deleteQnA(DataApiReqVO reqVO);
package nlib.bbs.service;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
/**
* <pre>
* @Class Name : BoardService.java
*
* @Description : 게시물 관리 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 19. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 19.
* @version 1.0
*
*/
public interface BoardService
{
public DataApiResVO listNotices(DataApiReqVO reqVO);
public DataApiResVO selectNotice(DataApiReqVO reqVO);
public DataApiResVO listFAQs(DataApiReqVO reqVO);
/**
* 묻고답하기 목록 조회한다.
*
* @param reqVO
* @return
*/
public DataApiResVO listQnAs(DataApiReqVO reqVO);
public DataApiResVO selectQnA(DataApiReqVO reqVO);
public DataApiResVO insertQnA(DataApiReqVO reqVO);
public DataApiResVO verifyWriter(DataApiReqVO reqVO);
public DataApiResVO updateQnA(DataApiReqVO reqVO);
public DataApiResVO deleteQnA(DataApiReqVO reqVO);
}

View File

@ -1,55 +1,67 @@
package nlib.bbs.service.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import nlib.cmm.web.MainController;
import nlib.restful.DataApi;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
@Repository("boardDAO")
public class BoardDAO extends DataApi
{
private static final Logger log = LoggerFactory.getLogger(BoardDAO.class);
public DataApiResVO listNotices(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO selectNotice(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO listFAQs(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO verifyWriter(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO updateQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO deleteQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO insertQnA(DataApiReqVO reqVO) {
return null;
}
package nlib.bbs.service.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import nlib.cmm.web.MainController;
import nlib.restful.DataApi;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
@Repository("boardDAO")
public class BoardDAO extends DataApi
{
private static final Logger log = LoggerFactory.getLogger(BoardDAO.class);
/**
* 자원의 URI
*/
public static final String RESOURCE_URI = "/uac/service/board/qna";
public DataApiResVO listNotices(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO selectNotice(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO listFAQs(DataApiReqVO reqVO) {
return null;
}
/**
* 묻고답하기 목록 조회한다.
*
* @param reqVO
* @return
*/
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
reqVO.setReqUrl(RESOURCE_URI + "/list");
return get(reqVO);
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO verifyWriter(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO updateQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO deleteQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO insertQnA(DataApiReqVO reqVO) {
return null;
}
}

View File

@ -1,60 +1,66 @@
package nlib.bbs.service.impl;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import nlib.bbs.service.BoardService;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
@Service("boardService")
public class BoardServiceImpl implements BoardService
{
private static final Logger log = LoggerFactory.getLogger(BoardServiceImpl.class);
@Resource(name = "boardDAO")
private BoardDAO boardDAO;
public DataApiResVO listNotices(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO selectNotice(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO listFAQs(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO insertQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO verifyWriter(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO updateQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO deleteQnA(DataApiReqVO reqVO) {
return null;
}
package nlib.bbs.service.impl;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import nlib.bbs.service.BoardService;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
@Service("boardService")
public class BoardServiceImpl implements BoardService
{
private static final Logger log = LoggerFactory.getLogger(BoardServiceImpl.class);
@Resource(name = "boardDAO")
private BoardDAO boardDAO;
public DataApiResVO listNotices(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO selectNotice(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO listFAQs(DataApiReqVO reqVO) {
return null;
}
/*
* 묻고답하기 목록 조회한다.
*
* (non-Javadoc)
* @see nlib.bbs.service.BoardService#listQnAs(nlib.restful.service.DataApiReqVO)
*/
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
return boardDAO.listQnAs(reqVO);
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO insertQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO verifyWriter(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO updateQnA(DataApiReqVO reqVO) {
return null;
}
public DataApiResVO deleteQnA(DataApiReqVO reqVO) {
return null;
}
}

View File

@ -1,69 +1,172 @@
package nlib.bbs.web;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import nlib.bbs.service.BoardService;
import nlib.bbs.service.impl.BoardServiceImpl;
@Controller
public class BoardController
{
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
@Resource(name = "boardService")
private BoardService boardService;
public ModelMap listNotices(HttpServletRequest req) {
return null;
}
public ModelMap selectNotice(HttpServletRequest req) {
return null;
}
public ModelMap listFAQs(HttpServletRequest req) {
return null;
}
public ModelMap listQnAs(HttpServletRequest req) {
return null;
}
public ModelMap selectQnA(HttpServletRequest req) {
return null;
}
public ModelMap insertQnAForm(HttpServletRequest req) {
return null;
}
public ModelMap insertQnA(HttpServletRequest req) {
return null;
}
public ModelMap verifyWriter(HttpServletRequest req) {
return null;
}
public ModelMap updateQnAForm(HttpServletRequest req) {
return null;
}
public ModelMap updateQnA(HttpServletRequest req) {
return null;
}
public ModelMap deleteQnA(HttpServletRequest req) {
return null;
}
package nlib.bbs.web;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import nlib.bbs.service.BoardService;
import nlib.cmm.NlibCommonController;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
@Controller
public class BoardController extends NlibCommonController
{
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
@Resource(name = "boardService")
private BoardService boardService;
@Autowired
private AuthenticationManager authenticationManager;
/**
* 공지사항 목록 조회한다.
*
* @param req
* @return
*/
@SuppressWarnings("deprecation")
@RequestMapping("/board/listNotices.do")
public String listNotices(HttpServletRequest req) {
return "nlib/board/listNotices";
}
/**
* 공지사항 상세 내용 조회한다.
* @param req
* @return
*/
@RequestMapping("/board/selectNotice.do")
public String selectNotice(HttpServletRequest req) {
return "nlib/board/selectNotice";
}
/**
* FAQ 목록 조회한다.
*
* @param req
* @return
*/
@RequestMapping("/board/listFAQs.do")
public String listFAQs(HttpServletRequest req) {
return "nlib/board/listFAQs";
}
/**
* 묻고답하기 목록 조회 화면을 구성한다.
*
* @param req
* @return
*/
@RequestMapping("/board/listQnAs.do")
public String listQnAs(HttpServletRequest req, Authentication authentication, @RequestParam Map<String, String> commandMap, ModelMap model) {
return "nlib/board/listQnAs";
}
/**
* 묻고답하기 목록 조회한다.
*
* @param req
* @return
*/
@RequestMapping(value="/board/listQnAsAjax.do")
public ResponseEntity<String> listQnAsAjax(HttpServletRequest req,
Authentication authentication, @RequestBody Map<String, String> paramMap) {
String searchKeyword = paramMap.get("searchKeyword");
String pageNo = paramMap.get("pageNo");
String pageRows = paramMap.get("pageRows");
log.debug("listQnAs > pageNo = " + pageNo);
log.debug("listQnAs > pageRows = " + pageRows);
log.debug("listQnAs > keyword = " + searchKeyword);
//-------------------------------
// REQ VO 구성
//-------------------------------
DataApiReqVO reqVO = new DataApiReqVO();
reqVO.setAuthKey(getAuthKey(authentication));
reqVO.setPageNo(pageNo);
reqVO.setPageRows(pageRows);
// 추가 정보 설정
HashMap<String, Object> info = new HashMap<String, Object>();
info.put("keyword", searchKeyword);
reqVO.setInfo(info);
// 요청
DataApiResVO resVO = boardService.listQnAs(reqVO);
// JSON변환 응답 처리
return makeResponseEntityJson(resVO);
}
/**
* 묻고답하기 상세 내용 조회한다.
*
* @param req
* @return
*/
@RequestMapping("/board/selectQnA.do")
public String selectQnA(HttpServletRequest req) {
return "nlib/board/selectQnA";
}
/**
* 묻고답하기 글작성화면을 표출한다.
*
* @param req
* @return
*/
@RequestMapping("/board/insertQnAForm.do")
public String insertQnAForm(HttpServletRequest req) {
return "nlib/board/insertQnAForm";
}
@RequestMapping("/board/insertQnA.do")
public String insertQnA(HttpServletRequest req) {
return "nlib/board/insertQnA";
}
@RequestMapping("/board/verifyWriter.do")
public String verifyWriter(HttpServletRequest req) {
return "nlib/board/verifyWriter";
}
@RequestMapping("/board/updateQnAForm.do")
public String updateQnAForm(HttpServletRequest req) {
return "nlib/board/updateQnAForm";
}
@RequestMapping("/board/updateQnA.do")
public String updateQnA(HttpServletRequest req) {
return "nlib/board/updateQnA";
}
@RequestMapping("/board/deleteQnA.do")
public String deleteQnA(HttpServletRequest req) {
return "nlib/board/deleteQnA";
}
}

View File

@ -0,0 +1,64 @@
package nlib.cmm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import nlib.bbs.web.BoardController;
import nlib.cmm.exception.ErrorMessage;
import nlib.restful.service.DataApiResVO;
import nlib.security.SecUserVO;
import nlib.user.service.NlibLoginVO;
public class NlibCommonController {
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
static final String ANONYMOUS_AUTH_KEY = "ANONYMOUS_AUTH_KEY_NONE";
public NlibLoginVO getNlibLoginVO(Authentication authentication) {
if(authentication == null) return null;
return (NlibLoginVO)authentication.getPrincipal();
}
public SecUserVO getSecLoginVO(Authentication authentication) {
if(authentication == null) return null;
return (SecUserVO)authentication.getPrincipal();
}
public String getAuthKey(Authentication authentication) {
if(authentication == null) return ANONYMOUS_AUTH_KEY;
return ((NlibLoginVO)authentication.getPrincipal()).getAuthKey();
}
public ResponseEntity<String> makeResponseEntityJson(DataApiResVO resVO) {
// Convert Json
ObjectMapper mapper = new ObjectMapper();
String jsonStr = null;
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
try {
jsonStr = mapper.writeValueAsString(resVO);
log.debug("RETURN DATA > json:" + jsonStr);
} catch (JsonProcessingException e) {
ErrorMessage eMsg = new ErrorMessage("ERR_JSON_CONVERT", "응답객체를 JSON으로 변환 처리 중 오류가 발생하였습니다. : " + e.toString());
try { jsonStr = mapper.writeValueAsString(eMsg); } catch (JsonProcessingException ee) {}
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).headers(headers).body(jsonStr);
}
return ResponseEntity.ok().headers(headers).body(jsonStr);
}
}

View File

@ -0,0 +1,17 @@
package nlib.cmm.exception;
public class ErrorMessage {
String code = null;
String message = null;
public ErrorMessage() {
super();
}
public ErrorMessage(String code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -0,0 +1,186 @@
package nlib.cmm.fileupload;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import egovframework.com.cmm.EgovWebUtil;
import egovframework.com.cmm.service.FileVO;
import nlib.cmm.exception.ErrorMessage;
import nlib.cmm.service.NlibProperty;
import nlib.util.FileUtil;
import nlib.util.StringUtil;
import nlib.util.UUID;
/**
* <pre>
* @Class Name : FileUploadController.java
*
* @Description : 파일 업로드를 처리하는 컨트롤러
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 15.
* @version 1.0
*
*/
@Controller
public class FileUploadController {
private static final Logger log = LoggerFactory.getLogger(FileUploadController.class);
@Resource(name="nlibProperty")
NlibProperty nlibProperty;
/**
* 첨부파일이 저장되는 최상위 위치
*/
@Value("#{properties['fileupload.base.path']}")
private String FILEUPLOAD_BASE_PATH;
/**
* 첨부파일 임시 저장 위치
*/
@Value("#{properties['fileupload.temp.subpath']}")
private String FILEUPLOAD_TEMP_SUBPATH;
@ResponseBody
@RequestMapping(value="/fileupload/uploadFilesAjax.do", produces="application/json")
public ResponseEntity uploadFilesAjax(
final MultipartHttpServletRequest multiRequest
, @RequestParam("subPathKey") String subPathKey
, HttpServletResponse response) {
// TODO : 권한 체크 추가할
List<FileVO> result = new ArrayList<FileVO>();
try {
// 최상위 위치
if(FileUtil.isNotValid(FILEUPLOAD_BASE_PATH)) throw new Exception("첨부파일이 저장되는 최상위 위치값이 적절하지 않습니다.");
// 서브 위치
if(StringUtil.isEmpty(subPathKey)) throw new Exception("첨부파일이 저장되는 위치정보값이 정확하지 않습니다.");
String subPath = nlibProperty.getProperty(subPathKey);
if(FileUtil.isNotValid(subPath)) throw new Exception("첨부파일 서브 위치값이 적절하지 않습니다.");
final Map<String, MultipartFile> files = multiRequest.getFileMap();
log.debug("uploadFilesAjax : 진입 " + (files == null ? " files null " : files.size()));
File dir = new File(FILEUPLOAD_BASE_PATH + subPath);
if(!dir.exists() || !dir.isDirectory()) dir.mkdirs();
if(!files.isEmpty()) {
Iterator<Entry<String, MultipartFile>> itr = files.entrySet().iterator();
MultipartFile file;
String filePath = "";
FileVO fvo;
int fileKey = 1;
while (itr.hasNext()) {
Entry<String, MultipartFile> entry = itr.next();
file = entry.getValue();
String orginFileName = file.getOriginalFilename();
//--------------------------------------
// 파일명이 없는 경우 처리
// (첨부가 되지 않은 input file type)
//--------------------------------------
if ("".equals(orginFileName)) {
continue;
}
////------------------------------------
int index = orginFileName.lastIndexOf(".");
//String fileName = orginFileName.substring(0, index);
String fileExt = orginFileName.substring(index + 1);
//String newName = KeyStr + getTimeStamp() + fileKey;
String newName = UUID.getPhysicalFileName();
long size = file.getSize();
log.debug("FILE UPLOAD : File New Name=" + newName);
if (!"".equals(orginFileName)) {
filePath = FILEUPLOAD_BASE_PATH + subPath + "/" + newName;
log.debug("FILE UPLOAD : filePath=" + filePath);
file.transferTo(new File(EgovWebUtil.filePathBlackList(filePath)));
}
fvo = new FileVO();
fvo.setFileExtsn(fileExt);
//fvo.setFileStreCours(storePathString);
fvo.setFileMg(Long.toString(size));
fvo.setOrignlFileNm(orginFileName);
fvo.setStreFileNm(newName);
//fvo.setAtchFileId(atchFileIdString);
fvo.setFileSn(String.valueOf(fileKey));
result.add(fvo);
fileKey++;
}
}
} catch(Exception e) {
ErrorMessage errorMessage = new ErrorMessage("ERROR", "처리에 실패하였습니다 : " + e.toString());
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMessage);
}
// Convert Json
ObjectMapper mapper = new ObjectMapper();
String json;
try {
json = mapper.writeValueAsString(result);
log.debug("RETURN DATA > json:" + json);
} catch (JsonProcessingException e) {
json = null;
e.printStackTrace();
}
HttpHeaders responseHeaders = new HttpHeaders();
//responseHeaders.set("Content-Type", "application/json; charset=UTF-8");
ResponseEntity ret = ResponseEntity.ok().headers(responseHeaders).body(json);
return ret;
}
}

View File

@ -0,0 +1,41 @@
package nlib.cmm.fileupload;
import java.io.Serializable;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
public class FileUploadDomain implements Serializable {
private String name;
private String description;
private List<MultipartFile> images;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<MultipartFile> getImages() {
return images;
}
public void setImages(List<MultipartFile> images) {
this.images = images;
}
}

View File

@ -0,0 +1,112 @@
package nlib.cmm.service;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* <pre>
* @Class Name : NlibProperty.java
*
* @Description : NLIB용 프로퍼티 파일을 읽어서 메모리에 로딩하고 관리하는 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 16. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 16.
* @version 1.0
*
*/
@Service("nlibProperty")
public class NlibProperty {
private static final Logger log = LoggerFactory.getLogger(NlibProperty.class);
/**
* 메모리에 로딩될 프로퍼티 객체 선언
*/
public static Properties properties = null;
/**
* nlib.properties 파일로 부터 속성을 읽어 들인다.
*
* @return 정상적으로 로딩한 건수를 리턴한다. 오류 발생 , 음수값이 리턴된다.
*/
public static int loadProperties() {
String nlibPropPath = null;
int propCount = -1;
try {
if(properties == null) properties = new Properties();
else properties.clear();
nlibPropPath = NlibProperty.class.getResource("").getPath();
nlibPropPath = nlibPropPath.substring(0, nlibPropPath.lastIndexOf("/nlib/") + 6) + "nlib.properties";
log.debug("NLIB Properties File Path : " + nlibPropPath);
try (InputStream input = new FileInputStream(nlibPropPath)) {
properties.load(input);
Enumeration<String> propEnum = (Enumeration<String>)properties.propertyNames();
String propName = null;
while(propEnum.hasMoreElements()) {
propName = propEnum.nextElement();
log.debug("Loading NLIB Properties : " + propName + " = " + properties.getProperty(propName));
}
log.debug("Loading is Done!");
propCount = properties.size();
} catch (IOException ex) {
if(properties != null) properties.clear();
log.error("Error in Loading NLIB Properties : " + nlibPropPath);
ex.printStackTrace();
return -2;
}
} catch(Exception e) {
if(properties != null) properties.clear();
log.error("Error in Solving NLIB Properties Path : " + nlibPropPath);
e.printStackTrace();
return -3;
}
return propCount;
}
/**
* name 값을 키로하는 속성값을 리턴한다.
*
* @param name
* @return
*/
public String getProperty(String name) {
if(properties == null || properties.size() < 1) {
if(loadProperties() < 0) return null;
}
return properties.getProperty(name);
}
}

View File

@ -0,0 +1,66 @@
package nlib.cmm.web;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import nlib.cmm.service.NlibProperty;
/**
* <pre>
* @Class Name : SystemController.java
*
* @Description : 각종 시스템 설정관련 기능 모음 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 16. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 16.
* @version 1.0
*
*/
@Controller
public class SystemController {
private static final Logger log = LoggerFactory.getLogger(SystemController.class);
/**
* NLIB 프로퍼티 서비스
*/
@Resource(name="nlibProperty")
NlibProperty nlibProperty;
/**
* NLIB Property 재로드 작업을 요청한다.
*
* @param authentication
* @param model
* @return
*/
@RequestMapping( {"/system/reloadProperties.do"} )
public String reloadProperties(Authentication authentication, ModelMap model) {
// TODO : 시스템관리자인지 권한 체크할
int propCount = nlibProperty.loadProperties();
model.addAttribute("code", String.format("프로퍼티 건수(결과) : %d", propCount));
model.addAttribute("message", "NLIB Property 재로드 작업을 호출했습니다. 로그에서 처리결과를 확인하시기 바랍니다.");
return "nlib/cmm/common";
}
}

View File

@ -1,237 +1,242 @@
package nlib.restful.service;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import com.thoughtworks.xstream.XStream;
import nlib.cmm.util.MapEntryConverter;
import nlib.util.StringUtil;
/**
* <pre>
* @Class Name : DataApiInterface.java
*
* @Description : DAO에서 상속할 DataApi의 부모 클래스들을 위한 인터페이스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 9. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 9.
* @version 1.0
*
*/
public interface DataApiInterface {
static final Logger log = LoggerFactory.getLogger(DataApiInterface.class);
/**
* 조회
*
* @param reqVO
* @return
*/
public DataApiResVO get(DataApiReqVO reqVO);
/**
* 등록
*
* @param reqVO
* @return
*/
public DataApiResVO put(DataApiReqVO reqVO);
/**
* 수정
*
* @param reqVO
* @return
*/
public DataApiResVO post(DataApiReqVO reqVO);
/**
* 삭제
*
* @param reqVO
* @return
*/
public DataApiResVO delete (DataApiReqVO reqVO);
/**
* 실제 RESTful API 서버로 요청을 전송하고, 응답받은 자료를 응답VO에 담아서 리턴한다.
*
* @param reqVO
* @param method
* @return
*/
public DataApiResVO send(DataApiReqVO reqVO, HttpMethod method);
/**
* 요청 VO를 Map 형태로 변환한다.
*
* @param reqVO
* @return
*/
public static MultiValueMap<String, String> makeParamMap(DataApiReqVO reqVO) {
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
// 공통
map.add("authKey", reqVO.getAuthKey());
map.add("rows", "" + reqVO.getPageRows());
map.add("page", "" + reqVO.getPageNo());
// 추가 정보
if(reqVO.hasInfo()) {
HashMap<String, Object> info = reqVO.getInfo();
for(String key : info.keySet()) {
Object val = info.get(key);
if(val instanceof HashMap) {
HashMap<String, String> subInfo = (HashMap)val;
for(String subKey : subInfo.keySet()) {
String subVal = subInfo.get(subKey);
map.add(subKey, subVal);
}
} else {
map.add(key, (String)val);
}
}
}
return map;
}
/**
* 요청전 공통 입력 파라메터를 확인한다.
*
* @param reqVO
* @return
* @throws Exception
*/
public static DataApiResVO checkReqCommonParams(DataApiReqVO reqVO) throws Exception {
if(reqVO == null) {
return new DataApiResVO("ERR_NO_REQ", "데이터송수신 요청객체가 존재하지 않습니다.");
}
if(StringUtil.isEmpty(reqVO.getReqUrl())) {
return new DataApiResVO("ERR_NO_RURL", "데이터 요청 업무ID에 대한 URL/RUI 정보가 존재하지 않습니다.");
}
if(StringUtil.isEmpty(reqVO.getAuthKey())) {
return new DataApiResVO("ERR_NO_AUTHKEY", "데이터 요청에 대한 권한키 정보가 존재하지 않습니다.");
}
return null;
}
/**
* 처리결과 정보를 입력받아 DataApiResVO를 생성한다.
*
* @param resultCode
* @param resultMessage
* @return
*/
public static DataApiResVO makeErrorRes(String resultCode, String resultMessage) {
return new DataApiResVO(resultCode, resultMessage);
}
/**
* 응답받은 XML 문자열을 DataApiResVO (내부 Map객체 포함) 객체로 변환하여 리턴한다.
*
* @param xmlStr
* @return
*/
public static DataApiResVO convertXmlToResVO(String xmlStr) {
DataApiResVO resVO = new DataApiResVO();
XStream magicApi = new XStream();
magicApi.registerConverter(new MapEntryConverter());
magicApi.alias("result", Map.class);
Map<String, Object> map = null;
try {
map = (Map<String, Object>) magicApi.fromXML(xmlStr);
} catch(Exception e) {
e.printStackTrace();
resVO.setResultCode("ERR_RES_XML_FORMAT");
resVO.setResultMessage(String.format("올바르지 않은 XML 형식의 응답입니다. : [%s]", xmlStr));
return resVO;
}
// 처리결과 확인
String commonKeyList = "|resulttype|code|message|page|totpages|records|".toLowerCase();
String lowerKey = null;
for( String key : map.keySet()) {
lowerKey = key.toLowerCase();
if(commonKeyList.contains("|" + lowerKey + "|")) {
if(lowerKey.equals("resulttype")) {
String resultType = (String)map.get(key);
if(!StringUtil.isEmpty(resultType) && resultType.toLowerCase().compareTo("success") == 0) {
resVO.setResultCode("S0000");
}
}
if(lowerKey.equals("code")) {
String code = (String)map.get(key);
int codeInt = 0;
try {
codeInt = Integer.parseInt(code);
} catch(Exception e) {
log.error("회신 code 정보를 정수로 변환처리 중 오류가 발생하였습니다." + e.toString());
codeInt = -1;
}
if(codeInt != 0) {
resVO.setResultCode(String.format("ERR_BIZERR(%s)", code));
} else {
resVO.setResultCode("S0000");
}
}
if(lowerKey.equals("message")) {
resVO.setResultMessage((String)map.get(key));
}
if(lowerKey.equals("page")) {
resVO.setPageNo(StringUtil.toNumber((String)map.get(key)));
}
if(lowerKey.equals("totpages")) {
resVO.setPageTotCount(StringUtil.toNumber((String)map.get(key)));
}
if(lowerKey.equals("records")) {
resVO.setRecordTotCount(StringUtil.toNumber((String)map.get(key), 0));
}
} else {
if(resVO.getInfo() == null) resVO.setInfo(new HashMap<String,Object>());
HashMap<String,Object> info = resVO.getInfo();
info.put(key, map.get(key));
}
}
return resVO;
}
}
package nlib.restful.service;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import com.thoughtworks.xstream.XStream;
import nlib.cmm.util.MapEntryConverter;
import nlib.util.StringUtil;
/**
* <pre>
* @Class Name : DataApiInterface.java
*
* @Description : DAO에서 상속할 DataApi의 부모 클래스들을 위한 인터페이스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 9. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 9.
* @version 1.0
*
*/
public interface DataApiInterface {
static final Logger log = LoggerFactory.getLogger(DataApiInterface.class);
/**
* 조회
*
* @param reqVO
* @return
*/
public DataApiResVO get(DataApiReqVO reqVO);
/**
* 등록
*
* @param reqVO
* @return
*/
public DataApiResVO put(DataApiReqVO reqVO);
/**
* 수정
*
* @param reqVO
* @return
*/
public DataApiResVO post(DataApiReqVO reqVO);
/**
* 삭제
*
* @param reqVO
* @return
*/
public DataApiResVO delete (DataApiReqVO reqVO);
/**
* 실제 RESTful API 서버로 요청을 전송하고, 응답받은 자료를 응답VO에 담아서 리턴한다.
*
* @param reqVO
* @param method
* @return
*/
public DataApiResVO send(DataApiReqVO reqVO, HttpMethod method);
/**
* 요청 VO를 Map 형태로 변환한다.
*
* @param reqVO
* @return
*/
public static MultiValueMap<String, String> makeParamMap(DataApiReqVO reqVO) {
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
// 공통
map.add("authKey", reqVO.getAuthKey());
map.add("rows", "" + reqVO.getPageRows());
map.add("page", "" + reqVO.getPageNo());
// 추가 정보
if(reqVO.hasInfo()) {
HashMap<String, Object> info = reqVO.getInfo();
for(String key : info.keySet()) {
Object val = info.get(key);
if(val instanceof HashMap) {
HashMap<String, String> subInfo = (HashMap)val;
for(String subKey : subInfo.keySet()) {
String subVal = subInfo.get(subKey);
map.add(subKey, subVal);
}
} else {
map.add(key, (String)val);
}
}
}
// 요청 파라메타 확인
for(String key : map.keySet()) {
log.debug("MultiValueMap > " + key + "=" + map.get(key));
}
return map;
}
/**
* 요청전 공통 입력 파라메터를 확인한다.
*
* @param reqVO
* @return
* @throws Exception
*/
public static DataApiResVO checkReqCommonParams(DataApiReqVO reqVO) throws Exception {
if(reqVO == null) {
return new DataApiResVO("ERR_NO_REQ", "데이터송수신 요청객체가 존재하지 않습니다.");
}
if(StringUtil.isEmpty(reqVO.getReqUrl())) {
return new DataApiResVO("ERR_NO_RURL", "데이터 요청 업무ID에 대한 URL/RUI 정보가 존재하지 않습니다.");
}
if(StringUtil.isEmpty(reqVO.getAuthKey())) {
return new DataApiResVO("ERR_NO_AUTHKEY", "데이터 요청에 대한 권한키 정보가 존재하지 않습니다.");
}
return null;
}
/**
* 처리결과 정보를 입력받아 DataApiResVO를 생성한다.
*
* @param resultCode
* @param resultMessage
* @return
*/
public static DataApiResVO makeErrorRes(String resultCode, String resultMessage) {
return new DataApiResVO(resultCode, resultMessage);
}
/**
* 응답받은 XML 문자열을 DataApiResVO (내부 Map객체 포함) 객체로 변환하여 리턴한다.
*
* @param xmlStr
* @return
*/
public static DataApiResVO convertXmlToResVO(String xmlStr) {
DataApiResVO resVO = new DataApiResVO();
XStream magicApi = new XStream();
magicApi.registerConverter(new MapEntryConverter());
magicApi.alias("result", Map.class);
Map<String, Object> map = null;
try {
map = (Map<String, Object>) magicApi.fromXML(xmlStr);
} catch(Exception e) {
e.printStackTrace();
resVO.setResultCode("ERR_RES_XML_FORMAT");
resVO.setResultMessage(String.format("올바르지 않은 XML 형식의 응답입니다. : [%s]", xmlStr));
return resVO;
}
// 처리결과 확인
String commonKeyList = "|resulttype|code|message|page|totpages|records|".toLowerCase();
String lowerKey = null;
for( String key : map.keySet()) {
lowerKey = key.toLowerCase();
if(commonKeyList.contains("|" + lowerKey + "|")) {
if(lowerKey.equals("resulttype")) {
String resultType = (String)map.get(key);
if(!StringUtil.isEmpty(resultType) && resultType.toLowerCase().compareTo("success") == 0) {
resVO.setResultCode("S0000");
}
}
if(lowerKey.equals("code")) {
String code = (String)map.get(key);
int codeInt = 0;
try {
codeInt = Integer.parseInt(code);
} catch(Exception e) {
log.error("회신 code 정보를 정수로 변환처리 중 오류가 발생하였습니다." + e.toString());
codeInt = -1;
}
if(codeInt != 0) {
resVO.setResultCode(String.format("ERR_BIZERR(%s)", code));
} else {
resVO.setResultCode("S0000");
}
}
if(lowerKey.equals("message")) {
resVO.setResultMessage((String)map.get(key));
}
if(lowerKey.equals("page")) {
resVO.setPageNo(StringUtil.toNumber((String)map.get(key)));
}
if(lowerKey.equals("totpages")) {
resVO.setPageTotCount(StringUtil.toNumber((String)map.get(key)));
}
if(lowerKey.equals("records")) {
resVO.setRecordTotCount(StringUtil.toNumber((String)map.get(key), 0));
}
} else {
if(resVO.getInfo() == null) resVO.setInfo(new HashMap<String,Object>());
HashMap<String,Object> info = resVO.getInfo();
info.put(key, map.get(key));
}
}
return resVO;
}
}

View File

@ -0,0 +1,79 @@
package nlib.restful.service;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
public class XmlConverter {
@SuppressWarnings("restriction")
public static void main(String argv[]) {
String inputFile = "C:/iams/workspace/nlib/data/dataxml/uac.service.board.qna.list_GET.xml";
HashMap<String, String> resMap = new HashMap<String, String>();
try {
// First create a new XMLInputFactory
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
// Setup a new eventReader
InputStream in = new FileInputStream(inputFile);
XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
// Read the XML document
int depth = 0;
StartElement startElement = null;
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
System.out.println(" -> " + event);
String elementName = null;
String elementValue = null;
HashMap<String, String> elementValues = null;
if (event.isStartElement()) {
startElement = event.asStartElement();
if (startElement.getName().getLocalPart().equals("result")) {
depth++;
event = eventReader.nextEvent();
System.out.println(" > " + event);
// result의 하위 엘리먼트 시작 찾기
while (!event.isStartElement()) {
event = eventReader.nextEvent();
System.out.println(" 하위엘리먼트 시작전: " + event);
}
while (!event.isEndElement()) {
if (event.isCharacters()) {
String content = event.asCharacters().getData();
System.out.println("content: -" + content + "_");
}
event = eventReader.nextEvent();
System.out.println(" >> " + event);
}
event = eventReader.nextEvent();
System.out.println(" >>> " + event);
continue;
}
}
}
} catch (FileNotFoundException e) {
System.out.println("File not Found: " + inputFile);
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
}

View File

@ -1,102 +1,102 @@
package nlib.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import nlib.cmm.crypto.NlibPasswordEncoder;
/**
* <pre>
* @Class Name : SpringSecurityConfig.java
*
* @Description : Spring Security 환경설정 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 6. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 6.
* @version 1.0
*
*/
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/resources/**")
.antMatchers("/css/**")
.antMatchers("/images/**")
.antMatchers("/js/**")
.antMatchers("/temp/**")
.antMatchers("/favicon/**")
.antMatchers("/*/*Ajax.do")
;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login/login*.do").permitAll()
.antMatchers("/login/logout*.do").permitAll()
.antMatchers("/info/inform/*.do").permitAll()
.antMatchers("/").permitAll()
.antMatchers("/index.jsp").permitAll()
.antMatchers("/index.do").permitAll()
.antMatchers("/main/header.do").permitAll()
.antMatchers("/main/menu.do").permitAll()
.antMatchers("/sample/password/getSampleEncoder.do").permitAll()
.anyRequest().authenticated()
.and().formLogin()
.loginPage("/login/loginForm.do")
.permitAll()
.and().csrf()
.disable();
http.logout()
.logoutSuccessUrl("/login/loginForm.do?logout")
.invalidateHttpSession(true).deleteCookies("JSESSIONID")
;
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public UserDetailsService userDetailsService() {
return new SecUserDetailsService();
}
@Bean
public PasswordEncoder getPasswordEncoder() {
return new NlibPasswordEncoder();
}
}
package nlib.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder;
import nlib.cmm.crypto.NlibPasswordEncoder;
/**
* <pre>
* @Class Name : SpringSecurityConfig.java
*
* @Description : Spring Security 환경설정 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 6. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 6.
* @version 1.0
*
*/
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers("/resources/**")
.antMatchers("/css/**")
.antMatchers("/images/**")
.antMatchers("/js/**")
.antMatchers("/temp/**")
.antMatchers("/favicon/**")
.antMatchers("/*/*Ajax.do")
;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login/login*.do").permitAll()
.antMatchers("/login/logout*.do").permitAll()
.antMatchers("/info/inform/*.do").permitAll()
.antMatchers("/").permitAll()
.antMatchers("/index.jsp").permitAll()
.antMatchers("/index.do").permitAll()
.antMatchers("/main/header.do").permitAll()
.antMatchers("/main/menu.do").permitAll()
.antMatchers("/sample/password/getSampleEncoder.do").permitAll()
.anyRequest().authenticated()
.and().formLogin()
.loginPage("/login/loginForm.do")
.permitAll()
.and().csrf()
.disable();
http.logout()
.logoutSuccessUrl("/login/loginForm.do?logout")
.invalidateHttpSession(true).deleteCookies("JSESSIONID")
;
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public UserDetailsService userDetailsService() {
return new SecUserDetailsService();
}
@Bean
public PasswordEncoder getPasswordEncoder() {
return new NlibPasswordEncoder();
}
}

View File

@ -0,0 +1,53 @@
package nlib.util;
import egovframework.com.utl.fcc.service.EgovStringUtil;
/**
* <pre>
* @Class Name : FileUtil.java
*
* @Description : 파일 처리관련 유틸리티 기능 모음 클래스
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 16. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 16.
* @version 1.0
*
*/
public class FileUtil extends EgovStringUtil {
/**
* 경로나 파일명으로 적합한지를 판단한다.
*
* @param path
* @return 적합한 경우, true
*/
public static boolean isValid(String pathOrFilename) {
if(pathOrFilename == null || pathOrFilename.trim().length() == 0) return false;
if(pathOrFilename.contains("..")) return false;
return true;
}
/**
* 경로나 파일명으로 적합한지를 판단한다.
*
* @param path
* @return 부적합한 경우, true
*/
public static boolean isNotValid(String pathOrFilename) {
return !isValid(pathOrFilename);
}
}

View File

@ -1,65 +1,89 @@
package nlib.util;
import egovframework.com.utl.fcc.service.EgovStringUtil;
/**
* <pre>
* @Class Name : StringUtil.java
*
* @Description : 문자열 관련 공통 함수 모음
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 22. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 22.
* @version 1.0
*
*/
public class StringUtil extends EgovStringUtil {
/**
* Null 이거나, 빈문자열(공백 포함) 경우, true를 리턴한다.
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
return str == null || str.trim().length() == 0;
}
/**
* 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, -1을 리턴한다.
*
* @param str
* @return
*/
public static int toNumber(String str) {
return toNumber(str, -1);
}
/**
* 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, 기본값 정보 defaultInt를 리턴한다.
*
* @param str
* @param defaultInt
* @return
*/
public static int toNumber(String str, int defaultInt) {
if(isEmpty(str)) return defaultInt;
try {
return Integer.parseInt(str.trim());
} catch(Exception e) {}
return defaultInt;
}
}
package nlib.util;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Locale;
import egovframework.com.utl.fcc.service.EgovStringUtil;
/**
* <pre>
* @Class Name : StringUtil.java
*
* @Description : 문자열 관련 공통 함수 모음
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 22. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 22.
* @version 1.0
*
*/
public class StringUtil extends EgovStringUtil {
/**
* Null 이거나, 빈문자열(공백 포함) 경우, true를 리턴한다.
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
return str == null || str.trim().length() == 0;
}
/**
* 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, -1을 리턴한다.
*
* @param str
* @return
*/
public static int toNumber(String str) {
return toNumber(str, -1);
}
/**
* 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, 기본값 정보 defaultInt를 리턴한다.
*
* @param str
* @param defaultInt
* @return
*/
public static int toNumber(String str, int defaultInt) {
if(isEmpty(str)) return defaultInt;
try {
return Integer.parseInt(str.trim());
} catch(Exception e) {}
return defaultInt;
}
/**
* 현재 시각을 yyyyMMddhhmmssSSS 형식으로 리턴한다.
*
* @return
*/
public static String getTimeStamp() {
String rtnStr = null;
// 문자열로 변환하기 위한 패턴 설정(년도-- :::(자정이후 ))
String pattern = "yyyyMMddhhmmssSSS";
SimpleDateFormat sdfCurrent = new SimpleDateFormat(pattern, Locale.KOREA);
Timestamp ts = new Timestamp(System.currentTimeMillis());
rtnStr = sdfCurrent.format(ts.getTime());
return rtnStr;
}
}

View File

@ -0,0 +1,48 @@
package nlib.util;
import egovframework.com.utl.fcc.service.EgovFormBasedFileUtil;
import egovframework.com.utl.fcc.service.EgovFormBasedUUID;
/**
* <pre>
* @Class Name : UUID.java
*
* @Description : UUID를 생성한다.
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 13. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 13.
* @version 1.0
*
*/
public class UUID {
/**
* 새로운 UUID를 생성하여 리턴한다.
*
* @return
*/
public static String getNewUUID() {
return EgovFormBasedUUID.randomUUID().toString();
}
/**
* 파일용 UUID로 생성한 파일명을 리턴한다.
*
* @return
*/
public static String getPhysicalFileName() {
return "F" + StringUtil.getTimeStamp() + "_" + getNewUUID().replaceAll("-", "").toUpperCase();
}
}

View File

@ -1,65 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd
">
<context:component-scan base-package="egovframework, nlib">
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> -->
</context:component-scan>
<context:annotation-config />
<!-- NLIB PROPERTIES 추가 (DIGITALSHIP 2021.06.17) -->
<util:properties id="properties" location="classpath:nlib/nlib.properties" />
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/egovframework/message/message-common</value>
<value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
<value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
</list>
</property>
<property name="cacheSeconds">
<value>60</value>
</property>
</bean>
<bean id="leaveaTrace" class="egovframework.rte.fdl.cmmn.trace.LeaveaTrace">
<property name="traceHandlerServices">
<list>
<ref bean="traceHandlerService" />
</list>
</property>
</bean>
<bean id="traceHandlerService" class="egovframework.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager">
<property name="reqExpMatcher">
<ref bean="antPathMater" />
</property>
<property name="patterns">
<list>
<value>*</value>
</list>
</property>
<property name="handlers">
<list>
<ref bean="defaultTraceHandler" />
</list>
</property>
</bean>
<bean id="antPathMater" class="org.springframework.util.AntPathMatcher" />
<bean id="defaultTraceHandler" class="egovframework.rte.fdl.cmmn.trace.handler.DefaultTraceHandler" />
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd
">
<context:component-scan base-package="egovframework, nlib">
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> -->
</context:component-scan>
<context:annotation-config />
<!-- NLIB PROPERTIES 추가 (DIGITALSHIP 2021.06.17) -->
<util:properties id="properties" location="classpath:nlib/nlib.properties" />
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/egovframework/message/message-common</value>
<value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
<value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
</list>
</property>
<property name="cacheSeconds">
<value>60</value>
</property>
</bean>
<bean id="leaveaTrace" class="egovframework.rte.fdl.cmmn.trace.LeaveaTrace">
<property name="traceHandlerServices">
<list>
<ref bean="traceHandlerService" />
</list>
</property>
</bean>
<bean id="traceHandlerService" class="egovframework.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager">
<property name="reqExpMatcher">
<ref bean="antPathMater" />
</property>
<property name="patterns">
<list>
<value>*</value>
</list>
</property>
<property name="handlers">
<list>
<ref bean="defaultTraceHandler" />
</list>
</property>
</bean>
<bean id="antPathMater" class="org.springframework.util.AntPathMatcher" />
<bean id="defaultTraceHandler" class="egovframework.rte.fdl.cmmn.trace.handler.DefaultTraceHandler" />
<!-- MULTIPART RESOLVERS -->
<!-- regular spring resolver -->
<bean id="spring.RegularCommonsMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="600000000" />
<property name="maxInMemorySize" value="100000000" />
</bean>
<alias name="spring.RegularCommonsMultipartResolver" alias="multipartResolver" />
</beans>

View File

@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory"/>
</bean>
<bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations">
<list>
<value>/WEB-INF/config/egovframework/validator/validator-rules.xml</value>
<value>/WEB-INF/config/egovframework/validator/validator.xml</value>
</list>
</property>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- <bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory"/>
</bean> -->
<!--
<bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations">
<list>
<value>/WEB-INF/config/egovframework/validator/validator-rules.xml</value>
<value>/WEB-INF/config/egovframework/validator/validator.xml</value>
</list>
</property>
</bean> -->
</beans>

View File

@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>

View File

@ -1,48 +1,48 @@
#-----------------------------------------------------------------------
#
# nlib.properties : \uc628\ub77c\uc778\uc790\ub8cc\ub300\ucd9c\uad00\ub9ac\uc2dc\uc2a4\ud15c
#
# @\ud504\ub85c\uc81d\ud2b8\uba85: \uc9c0\ubc29\ubb38\ud654\uc6d0 \ud1b5\ud569\uc790\ub8cc\uad00\ub9ac\uc2dc\uc2a4\ud15c \uad6c\ucd95\uc0ac\uc5c5 (2021)
#-----------------------------------------------------------------------
# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4.
# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5
# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5
# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9)
# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428)
# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9
# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83
#-----------------------------------------------------------------------
#----------------------------------------
# DataAPI \uc811\uc18d\uc815\ubcf4
#----------------------------------------
# \uac1c\ubc1c \uc11c\ubc84
#dataapi.server.ip = 210.181.197.70
#dataapi.server.port = 80
#dataapi.server.protocol = http
# \ub85c\uceec \uc11c\ubc84
dataapi.server.ip = localhost
dataapi.server.port = 8088
dataapi.server.protocol = http
# \ub85c\uceec \uac1c\ubc1c\uc6a9 XML \ud30c\uc77c \uc704\uce58
dataapi.temp.xml.path = C:/iams/workspace/nlib/data/dataxml
# Aria \uc54c\uace0\ub9ac\uc998
crypto.aria.defaultKey = TheFederationOfKoreaCultureCenter027042322
#----------------------------------------
# \ucca8\ubd80\ud30c\uc77c \uacbd\ub85c \uc815\ubcf4
#----------------------------------------
# \ucca8\ubd80\ud30c\uc77c \ucd5c\uc0c1\uc704 \uc704\uce58
fileupload.base.path = C:/iams/workspace/nlib/data/fileupload
# \uc784\uc2dc \uc800\uc7a5 \uc704\uce58
fileupload.temp.subpath = /temp
# \ubb3b\uace0\ub2f5\ud558\uae30 \uac8c\uc2dc\ud310 \uc11c\ube0c\uc704\uce58 : \ucca8\ubd80\ud30c\uc77c \ucd5c\uc0c1\uc704 \uc704\uce58 \uc774\ud558\uc758 \uc704\uce58 \uc815\ubcf4\ub97c \uc124\uc815
fileupload.bbs.qna.subpath = /bbs/qna
#-----------------------------------------------------------------------
#
# nlib.properties : \uc628\ub77c\uc778\uc790\ub8cc\ub300\ucd9c\uad00\ub9ac\uc2dc\uc2a4\ud15c
#
# @\ud504\ub85c\uc81d\ud2b8\uba85: \uc9c0\ubc29\ubb38\ud654\uc6d0 \ud1b5\ud569\uc790\ub8cc\uad00\ub9ac\uc2dc\uc2a4\ud15c \uad6c\ucd95\uc0ac\uc5c5 (2021)
#-----------------------------------------------------------------------
# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4.
# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5
# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5
# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9)
# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428)
# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9
# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83
#-----------------------------------------------------------------------
#----------------------------------------
# DataAPI \uc811\uc18d\uc815\ubcf4
#----------------------------------------
# \uac1c\ubc1c \uc11c\ubc84
#dataapi.server.ip = 210.181.197.70
#dataapi.server.port = 80
#dataapi.server.protocol = http
# \ub85c\uceec \uc11c\ubc84
dataapi.server.ip = localhost
dataapi.server.port = 8088
dataapi.server.protocol = http
# \ub85c\uceec \uac1c\ubc1c\uc6a9 XML \ud30c\uc77c \uc704\uce58
dataapi.temp.xml.path = C:/iams/workspace/nlib/data/dataxml
# Aria \uc54c\uace0\ub9ac\uc998
crypto.aria.defaultKey = TheFederationOfKoreaCultureCenter027042322
#----------------------------------------
# \ucca8\ubd80\ud30c\uc77c \uacbd\ub85c \uc815\ubcf4
#----------------------------------------
# \ucca8\ubd80\ud30c\uc77c \ucd5c\uc0c1\uc704 \uc704\uce58
fileupload.base.path = C:/iams/workspace/nlib/data/fileupload
# \uc784\uc2dc \uc800\uc7a5 \uc704\uce58
fileupload.temp.subpath = /temp
# \ubb3b\uace0\ub2f5\ud558\uae30 \uac8c\uc2dc\ud310 \uc11c\ube0c\uc704\uce58 : \ucca8\ubd80\ud30c\uc77c \ucd5c\uc0c1\uc704 \uc704\uce58 \uc774\ud558\uc758 \uc704\uce58 \uc815\ubcf4\ub97c \uc124\uc815
fileupload.bbs.qna.subpath = /bbs/qna

View File

@ -1,79 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="egovframework, nlib">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<!-- 쿠키를 이용한 Locale 이용시 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
<!--
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="cmmn/egovError"/>
<property name="exceptionMappings">
<props>
<prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">cmmn/egovError</prop>
<prop key="org.springframework.security.AccessDeniedException">cmmn/egovError</prop>
</props>
</property>
</bean>
-->
<!-- tiles 설정 : 시작 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="1" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles-layout.xml</value>
</list>
</property>
</bean>
<!-- tiles 설정 : 종료 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="order" value="1" />
</bean>
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="egovframework.com.cmm.web.EgovImgPaginationRenderer"/>
<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
<property name="rendererType">
<map>
<entry key="image" value-ref="imageRenderer"/>
</map>
</property>
</bean>
<!-- /For Pagination Tag -->
<!-- <mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator"/> -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="egovframework, nlib">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
</property>
<!-- @ResponseBody : application/json 변경 (2021.7.20 KKN) -->
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<!-- 쿠키를 이용한 Locale 이용시 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
<!--
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="cmmn/egovError"/>
<property name="exceptionMappings">
<props>
<prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">cmmn/egovError</prop>
<prop key="org.springframework.security.AccessDeniedException">cmmn/egovError</prop>
</props>
</property>
</bean>
-->
<!-- tiles 설정 : 시작 -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="1" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles-layout.xml</value>
</list>
</property>
</bean>
<!-- tiles 설정 : 종료 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="order" value="1" />
</bean>
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="egovframework.com.cmm.web.EgovImgPaginationRenderer"/>
<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
<property name="rendererType">
<map>
<entry key="image" value-ref="imageRenderer"/>
</map>
</property>
</bean>
<!-- /For Pagination Tag -->
<!-- <mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator"/> -->
</beans>

View File

@ -0,0 +1,83 @@
<%
/**
* <pre>
* @Class Name : getSampleInfo.jsp
*
* @Description : RESTful API 호출 샘플
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">QRCode 회원정보</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<!-- W2UI -->
<link rel="stylesheet" type="text/css" href="/nlib/js/w2ui/w2ui-nlib.css" />
<script type="text/javascript" src="/nlib/js/w2ui/w2ui-1.5.min.js"></script>
</head>
<body>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form commandName="reqInfo"
action="${pageContext.request.contextPath}/sample/barcode/getMemberQRCode.do" method="post"
target="_blank"
onSubmit="fncAuthorInsert(document.forms[0]); return false;">
<div id="grid" style="width: 100%; height: 250px;"></div>
</form:form>
<script type="text/javaScript" language="javascript">
$(function () {
$('#grid').w2grid({
name: 'grid',
header: 'List of Names',
columns: [
{ field: 'fname', text: '이름', size: '30%' },
{ field: 'lname', text: '성명', size: '30%' },
{ field: 'email', text: '이메일', size: '40%' },
{ field: 'sdate', text: '시작일자', size: '120px' }
],
records: [
{ recid: 1, fname: "Peter", lname: "Jeremia", email: 'peter@mail.com', sdate: '2/1/2010' },
{ recid: 2, fname: "Bruce", lname: "Wilkerson", email: 'bruce@mail.com', sdate: '6/1/2010' },
{ recid: 3, fname: "John", lname: "McAlister", email: 'john@mail.com', sdate: '1/16/2010' },
{ recid: 4, fname: "Ravi", lname: "Zacharies", email: 'ravi@mail.com', sdate: '3/13/2007' },
{ recid: 5, fname: "William", lname: "Dembski", email: 'will@mail.com', sdate: '9/30/2011' },
{ recid: 6, fname: "David", lname: "Peterson", email: 'david@mail.com', sdate: '4/5/2010' }
]
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,121 @@
<%
/**
* <pre>
* @Class Name : listQnAs.jsp
*
* @Description : 묻고답하기 목록을 조회한다.
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 13. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 13.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">묻고답하기 - 글쓰기</c:set>
<!-- File Upload : 시작 -->
<link rel="stylesheet" href="${pageContext.request.contextPath}/js/fileupload/dropzone.css" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/js/fileupload/style.css" />
<script src="${pageContext.request.contextPath}/js/fileupload/dropzone.js"></script>
<!-- File Upload : 종료 -->
<h3>${pageTitle }</h3>
<!-- 글쓰기 : 폼 -->
<form:form commandName="reqInfo"
action="${pageContext.request.contextPath}/board/insertQnA.do"
method="post">
<table>
<tr>
<td>제목</td>
<td><input type="input" name="title" id="title" value="" /></td>
</tr>
<tr>
<td>작성자명</td>
<td><input type="input" name="writerName" id="writerName" value="" /></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="input" name="password" id="password" value="" /></td>
</tr>
<tr>
<td>이메일</td>
<td><input type="input" name="email" id="email" value="" /></td>
</tr>
<tr>
<td>내용</td>
<td><textarea name="content" id="content" value=""></textarea></td>
</tr>
<tr>
<td>첨부파일</td>
<td><input type="input" name="email" id="email" value="" /></td>
</tr>
</table>
<input type="button" name="btnNew" id="btnNew" value="확인"
onclick="javascript:fileUploadNow();" />
<input type="button" name="btnNew" id="btnNew" value="취소"
onclick="javascript:location.href='${pageContext.request.contextPath}/board/listQnAs.do';" />
</form:form>
<div id="dropzone">
<form action="${pageContext.request.contextPath}/fileupload/uploadFile.do"
class="dropzone needsclick" id="myDropzone" name="myDropzone">
<div class="dz-message needsclick">
<button type="button" class="dz-button">Drop files here or click to select files.</button><br />
<span class="note needsclick">이곳에 파일을 끌어다 놓거나, 클릭하여 올릴 파일을 선택하세요.</span>
</div>
</form>
</div>
<script type="text/javaScript" language="javascript">
// 파일업로드 객체 생성
var myDropzone = new Dropzone("form#myDropzone", { url: "${pageContext.request.contextPath}/fileupload/uploadFilesAjax.do?subPathKey=fileupload.bbs.qna.subpath"});
// 각 파일별 업로드 성공시 호출됨
myDropzone.on("success", function(file) {
alert("success : " + file.name);
});
myDropzone.on("complete", function(file) {
alert("complete : " + file.name);
});
myDropzone.on("queuecomplete", function() {
alert("queuecomplete : " + file.name);
});
function fileUploadNow() {
myDropzone.processQueue();
}
</script>

View File

@ -0,0 +1,83 @@
<%
/**
* <pre>
* @Class Name : getSampleInfo.jsp
*
* @Description : RESTful API 호출 샘플
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">QRCode 회원정보</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<!-- W2UI -->
<link rel="stylesheet" type="text/css" href="/nlib/js/w2ui/w2ui-nlib.css" />
<script type="text/javascript" src="/nlib/js/w2ui/w2ui-1.5.min.js"></script>
</head>
<body>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form commandName="reqInfo"
action="${pageContext.request.contextPath}/sample/barcode/getMemberQRCode.do" method="post"
target="_blank"
onSubmit="fncAuthorInsert(document.forms[0]); return false;">
<div id="grid" style="width: 100%; height: 250px;"></div>
</form:form>
<script type="text/javaScript" language="javascript">
$(function () {
$('#grid').w2grid({
name: 'grid',
header: 'List of Names',
columns: [
{ field: 'fname', text: '이름', size: '30%' },
{ field: 'lname', text: '성명', size: '30%' },
{ field: 'email', text: '이메일', size: '40%' },
{ field: 'sdate', text: '시작일자', size: '120px' }
],
records: [
{ recid: 1, fname: "Peter", lname: "Jeremia", email: 'peter@mail.com', sdate: '2/1/2010' },
{ recid: 2, fname: "Bruce", lname: "Wilkerson", email: 'bruce@mail.com', sdate: '6/1/2010' },
{ recid: 3, fname: "John", lname: "McAlister", email: 'john@mail.com', sdate: '1/16/2010' },
{ recid: 4, fname: "Ravi", lname: "Zacharies", email: 'ravi@mail.com', sdate: '3/13/2007' },
{ recid: 5, fname: "William", lname: "Dembski", email: 'will@mail.com', sdate: '9/30/2011' },
{ recid: 6, fname: "David", lname: "Peterson", email: 'david@mail.com', sdate: '4/5/2010' }
]
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,146 @@
<%
/**
* <pre>
* @Class Name : listNotices.jsp
*
* @Description : JS-GRID 샘플 화면
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">공지사항</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<!-- GRID -->
<link type="text/css" rel="stylesheet" href="/nlib/js/jsgrid/nlib-jsgrid.css" />
<link type="text/css" rel="stylesheet" href="/nlib/js/jsgrid/nlib-jsgrid-theme.css" />
<script src="/nlib/js/jsgrid/nlib-jsgrid.js"></script>
</head>
<body>
<form:form commandName="reqInfo"
action="${pageContext.request.contextPath}/sample/barcode/getMemberQRCode.do" method="post"
target="_blank"
onSubmit="fncAuthorInsert(document.forms[0]); return false;">
<div id="jsGrid" name="jsGrid" ></div>
</form:form>
<script type="text/javaScript" language="javascript">
// 그리드 데이터
var clients = [
{ "noticeNo": 1, "noticeType": "01", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 2, "noticeType": "02", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 3, "noticeType": "03", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 4, "noticeType": "04", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 5, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 6, "noticeType": "06", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 7, "noticeType": "06", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 9, "noticeType": "01", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" }
];
// 그리드내 콤보박스 값
var noticeTypes = [
{ Name: "공지" , Id: "01" },
{ Name: "자료" , Id: "02" },
{ Name: "모집" , Id: "03" },
{ Name: "입찰" , Id: "04" },
{ Name: "발표" , Id: "05" },
{ Name: "이벤트", Id: "06" }
];
// 그리드 생성
$("#jsGrid").jsGrid({
width: "100%",
height: "100%",
inserting: false,
editing: false,
sorting: true,
paging: true,
pageSize: 10,
pageButtonCount: 10,
pageIndex: 1,
pageFirstText: " << ",
pagePrevText: " < ",
pageLastText: " >> ",
pageNextText: " > ",
pagerFormat: "{first} {prev} {pages} {next} {last}",
data: clients,
fields: [
{ title:"번호", name: "noticeNo" , type: "number" , width: 50, align: "center"},
{ title:"유형", name: "noticeType", type: "select", width: 80, align: "center", items: noticeTypes, valueField: "Id", textField: "Name" },
{ title:"제목", name: "title", type: "text" , width: 200, align: "left" },
{ title:"조회수", name: "readCount", type: "number", width: 50, align: "center" },
{ title:"등록일", name: "regDate", type: "text", width: 100, align: "center"}
]
});
</script>
</body>
</html>

View File

@ -0,0 +1,196 @@
<%
/**
* <pre>
* @Class Name : listQnAs.jsp
*
* @Description : 묻고답하기 목록을 조회한다.
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 13. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 13.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">묻고답하기</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<!-- GRID -->
<link type="text/css" rel="stylesheet" href="/nlib/js/jsgrid/nlib-jsgrid.css" />
<link type="text/css" rel="stylesheet" href="/nlib/js/jsgrid/nlib-jsgrid-theme.css" />
<script src="/nlib/js/jsgrid/nlib-jsgrid.js"></script>
</head>
<body onload="fn_init()">
<h1>묻고답하기</h1>
<form name="articleForm"
action="${pageContext.request.contextPath}/board/listQnAs.do"
method="post"
onSubmit="fn_search_article(); return false;">
<!-- 검색조건 -->
<select name="pageRows" id="pageRows" title="목록에 보여줄 글 개수">
<option value="10">10개씩 보기</option>
<option value="50">50개씩 보기</option>
<option value="100">100개씩 보기</option>
</select>
<input type="text" name="pageNo" id="pageNo" title="페이지번호" value="1" size="5" maxlength="5" />
<input type="text" name="searchKeyword" id="searchKeyword" title="검색어" value="" size="35" maxlength="50" />
<input type="submit" name="btnSearch" id="btnSearch" value="검색" />
<input type="button" name="btnNew" id="btnNew" value="글쓰기"
onclick="javascript:location.href='${pageContext.request.contextPath}/board/insertQnAForm.do';" />
<div id="jsGrid" name="jsGrid" ></div>
</form>
<script type="text/javaScript" language="javascript">
// 그리드 데이터
var clients = [
{ "noticeNo": 1, "noticeType": "01", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 2, "noticeType": "02", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 3, "noticeType": "03", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 4, "noticeType": "04", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 5, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 6, "noticeType": "06", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 7, "noticeType": "06", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 8, "noticeType": "05", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" },
{ "noticeNo": 9, "noticeType": "01", "title": "공지사항 제목입니다.", "readCount": 7, "regDate": "2021-07-11" }
];
// 그리드내 콤보박스 값
var noticeTypes = [
{ Name: "공지" , Id: "01" },
{ Name: "자료" , Id: "02" },
{ Name: "모집" , Id: "03" },
{ Name: "입찰" , Id: "04" },
{ Name: "발표" , Id: "05" },
{ Name: "이벤트", Id: "06" }
];
// 그리드 생성
$("#jsGrid").jsGrid({
width: "100%",
height: "100%",
inserting: false,
editing: false,
sorting: true,
paging: true,
pageSize: 10,
pageButtonCount: 10,
pageIndex: 1,
pageFirstText: " << ",
pagePrevText: " < ",
pageLastText: " >> ",
pageNextText: " > ",
pagerFormat: "{first} {prev} {pages} {next} {last}",
/* 이하만 설정 */
data: clients,
fields: [
{ title:"번호", name: "noticeNo" , type: "number" , width: 50, align: "center"},
{ title:"유형", name: "noticeType", type: "select", width: 80, align: "center", items: noticeTypes, valueField: "Id", textField: "Name" },
{ title:"제목", name: "title", type: "text" , width: 200, align: "left" },
{ title:"조회수", name: "readCount", type: "number", width: 50, align: "center" },
{ title:"등록일", name: "regDate", type: "text", width: 100, align: "center"}
]
});
function fn_search_article() {
var searchKeyword = document.articleForm.searchKeyword.value;
var pageNo = document.articleForm.pageNo.value;
var pageRows = document.articleForm.pageRows.value;
var inputData = {
"searchKeyword" : searchKeyword /*encodeURIComponent(searchKeyword)*/
, "pageNo" : pageNo
, "pageRows": pageRows};
//lert(JSON.stringify(inputData));
$.ajax({
url:"${pageContext.request.contextPath}/board/listQnAsAjax.do",
contentType: "application/json; charset=utf-8", /* */
type: "post",
data: JSON.stringify(inputData),
dataType:'json', /* Server Response Data Type */
success: function(returnData, status){
alert("returnData=" + JSON.stringify(returnData));
},
error: function(data){
alert("조회에 실패하였습니다.\n" + data.code + " : " + data.message);
}
});
}
function fn_init() {
fn_search_article();
document.articleForm.searchKeyword.focus();
}
</script>
</body>
</html>

View File

@ -0,0 +1,83 @@
<%
/**
* <pre>
* @Class Name : getSampleInfo.jsp
*
* @Description : RESTful API 호출 샘플
*
*
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
*
* </pre>
*
* @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 6. 15. KNKIM 최초 생성
*
*
* @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 6. 15.
* @version 1.0
*
*/
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
<c:set var="pageTitle">QRCode 회원정보</c:set>
<!DOCTYPE html>
<html>
<head>
<title>${pageTitle}</title>
<!-- W2UI -->
<link rel="stylesheet" type="text/css" href="/nlib/js/w2ui/w2ui-nlib.css" />
<script type="text/javascript" src="/nlib/js/w2ui/w2ui-1.5.min.js"></script>
</head>
<body>
<!-- javascript warning tag -->
<noscript class="noScriptTitle"><spring:message code="common.noScriptTitle.msg" /></noscript>
<form:form commandName="reqInfo"
action="${pageContext.request.contextPath}/sample/barcode/getMemberQRCode.do" method="post"
target="_blank"
onSubmit="fncAuthorInsert(document.forms[0]); return false;">
<div id="grid" style="width: 100%; height: 250px;"></div>
</form:form>
<script type="text/javaScript" language="javascript">
$(function () {
$('#grid').w2grid({
name: 'grid',
header: 'List of Names',
columns: [
{ field: 'fname', text: '이름', size: '30%' },
{ field: 'lname', text: '성명', size: '30%' },
{ field: 'email', text: '이메일', size: '40%' },
{ field: 'sdate', text: '시작일자', size: '120px' }
],
records: [
{ recid: 1, fname: "Peter", lname: "Jeremia", email: 'peter@mail.com', sdate: '2/1/2010' },
{ recid: 2, fname: "Bruce", lname: "Wilkerson", email: 'bruce@mail.com', sdate: '6/1/2010' },
{ recid: 3, fname: "John", lname: "McAlister", email: 'john@mail.com', sdate: '1/16/2010' },
{ recid: 4, fname: "Ravi", lname: "Zacharies", email: 'ravi@mail.com', sdate: '3/13/2007' },
{ recid: 5, fname: "William", lname: "Dembski", email: 'will@mail.com', sdate: '9/30/2011' },
{ recid: 6, fname: "David", lname: "Peterson", email: 'david@mail.com', sdate: '4/5/2010' }
]
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,11 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
결과코드 : ${code}
<br />
메시지 : ${message}

View File

@ -1,34 +1,35 @@
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<ul class="gnb">
<!-- 이용/소개 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/info/inform/selectGreeting.do';">인사말</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/info/inform/selectNCultureOperationInfo.do';">이용안내</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/bbs/board/listNotices.do';">공지사항</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/bbs/board/listFAQs.do';">자주하는질문</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/bbs/board/listQnAs.do';">묻고답하기</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/info/inform/selectInform.do';">찾아오시는길</a></li>
<!-- 자료검색 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/col/collection/listItems.do';">소장자료검색</a></li>
<!-- 내정보 : 조회/수정 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/user/member/selectMemberInfo.do';">내정보</a></li>
<!-- 내정보 : 대출/예약/열람/관심자료 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/col/rent/listRentItems.do';">대출</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/col/rent/listReservations.do';">예약</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/col/rent/listRequestsForViewingItem.do';">열람요청</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/col/collection/listInterests.do';">관심자료</a></li>
<!-- 개발자용 메뉴 -->
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/getSampleInfoForm.do';">통신API</a></li>
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/barcode/getMemberQRCodeForm.do';">QR코드</a></li>
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/password/getSampleEncoder.do';">암호화</a></li>
</ul>
<script type="text/javascript">
$(function() {
});
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<ul class="gnb">
<!-- 이용/소개 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/inform/selectGreeting.do';">인사말</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/inform/selectNCultureOperationInfo.do';">이용안내</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/board/listNotices.do';">공지사항</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/board/listFAQs.do';">자주하는질문</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/board/listQnAs.do';">묻고답하기</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/inform/selectInform.do';">찾아오시는길</a></li>
<!-- 자료검색 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/collection/listItems.do';">소장자료검색</a></li>
<!-- 내정보 : 조회/수정 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/member/selectMemberInfo.do';">내정보</a></li>
<!-- 내정보 : 대출/예약/열람/관심자료 -->
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/rent/listRentItems.do';">대출</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/rent/listReservations.do';">예약</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/rent/listRequestsForViewingItem.do';">열람요청</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/collection/listInterests.do';">관심자료</a></li>
<!-- 개발자용 메뉴 -->
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/getSampleInfoForm.do';">통신API</a></li>
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/barcode/getMemberQRCodeForm.do';">QR코드</a></li>
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/sample/password/getSampleEncoder.do';">암호화</a></li>
<li><a href="#" style="color:#FF5;" onclick="javascript:location.href='${pageContext.request.contextPath}/system/reloadProperties.do';">프로퍼티갱신</a></li>
</ul>
<script type="text/javascript">
$(function() {
});
</script>

View File

@ -1,29 +1,53 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<c:url value='/css/nlib.css' />" rel="stylesheet" type="text/css">
<title>온라인 자료대출관리 (N-LIB)</title>
</head>
<body>
<div id="page-container">
<div id="header"><tiles:insertAttribute name="header" /></div>
<div id="menu"><tiles:insertAttribute name="menu" /></div>
<div id="content-wrap"><tiles:insertAttribute name="main" /></div>
<div id="footer"><tiles:insertAttribute name="footer" /></div>
</div>
<script type="text/javascript">
$(function() {
});
</script>
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<link href="${pageContext.request.contextPath}/css/nlib.css" rel="stylesheet" type="text/css" />
<script src="${pageContext.request.contextPath}/js/jquery/jquery.min.js"></script>
<script src="${pageContext.request.contextPath}/js/nlib.js"></script>
<title>온라인 자료대출관리 (N-LIB)</title>
</head>
<body>
<div id="page-container">
<div id="header">
<!-- 머리말 : 시작 -->
<tiles:insertAttribute name="header" />
<!-- 머리말 : 종료 -->
</div>
<div id="menu">
<!-- 메뉴 : 시작 -->
<tiles:insertAttribute name="menu" />
<!-- 메뉴 : 종료 -->
</div>
<div id="content-wrap">
<!-- 메인 : 시작 -->
<tiles:insertAttribute name="main" />
<!-- 메인 : 종료 -->
</div>
<div id="footer">
<!-- 꼬리말 : 시작 -->
<tiles:insertAttribute name="footer" />
<!-- 꼬리말 : 종료 -->
</div>
</div>
<script type="text/javascript">
$(function() {
});
</script>
</body>
</html>

View File

@ -1,30 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- 메뉴 탭 타일즈 -->
<definition name="template" template="/WEB-INF/tiles/tiles-layout.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/inc/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/tiles/inc/menu.jsp" />
<put-attribute name="footer" value="/WEB-INF/tiles/inc/footer.jsp" />
</definition>
<definition name="*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}.jsp" />
</definition>
<definition name="*/*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>
<definition name="*/*/*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" />
</definition>
<definition name="*/*/*/*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}/{3}/{4}.jsp" />
</definition>
</tiles-definitions>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- 메뉴 탭 타일즈 -->
<definition name="template" template="/WEB-INF/tiles/tiles-layout.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/inc/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/tiles/inc/menu.jsp" />
<put-attribute name="footer" value="/WEB-INF/tiles/inc/footer.jsp" />
</definition>
<definition name="*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}.jsp" />
</definition>
<definition name="*/*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>
<definition name="*/*/*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" />
</definition>
<definition name="*/*/*/*" extends="template">
<put-attribute name="main" value="/WEB-INF/jsp/{1}/{2}/{3}/{4}.jsp" />
</definition>
</tiles-definitions>

View File

@ -1,124 +1,125 @@
/********************************************************************************/
/* */
/* Design RIAN */
/* Date : 2007-03-21 */
/* */
/* */
/********************************************************************************/
* {margin:0;padding:0;}
html {
height: 100%;
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
position: relative;
margin: 0;
padding-bottom: 6rem;
width: 100%;
}
html, body { height: 100%; }
#page-container {
padding-op: 150px;
}
#content-wrap {
position: relative;
display: block;
padding: 20px;
top:120px;
padding-bottom: 100px;
}
.gnb li {
float: left;
padding: 0px;
padding-right: 20px;
}
.gnb li a {
color: #fff;
font-weight: 600;
font-size: 16px;
}
.gnb-right {
padding-right: 40px;
position:relative;
top:-20px;
}
.gnb-right li {
float: right;
padding: 0px;
padding-right: 20px;
color: orange;
}
.gnb-right li a {
color: #333;
font-weight: bolder;
font-size: 14px;
}
#header {
width: 100%;
height: 60px;
font-weight:bolder;
position: fixed;
background: #fff;
padding: 20px;
color: #000;
font-weight: 900;
font: 16px "Noto Sans KR", sans-serif;
z-index: 10000;
}
#menu {
width: 100%;
height: 60px; /* Footer height */
position: fixed;
top:60px;
font-weight:bold;
background: #2781C1;
padding: 20px;
z-index: 10000;
font: 16px "Noto Sans KR", sans-serif;
}
#footer {
margin: 0;
padding: 1rem;
color: #AAAAAA;
background-color: #333333;
position: fixed;
width: 100%;
display: block;
text-align: center;
right: 0;
bottom: 0;
left: 0;
bottom: 0;
}
ul, ol, li {
list-style: none;
}
a {
color: inherit;
text-decoration: none;
background-color: transparent;
font: 16px "Noto Sans KR", sans-serif;
color: #333;
}
/********************************************************************************/
/* */
/* Design RIAN */
/* Date : 2007-03-21 */
/* */
/* */
/********************************************************************************/
* {margin:0;padding:0;}
html {
height: 100%;
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
position: relative;
margin: 0;
padding-bottom: 6rem;
width: 100%;
}
html, body { height: 100%; }
#page-container {
padding-op: 150px;
}
#content-wrap {
position: relative;
display: block;
padding: 20px;
top:120px;
padding-bottom: 100px;
}
.gnb li {
float: left;
padding: 0px;
padding-right: 20px;
}
.gnb li a {
color: #fff;
font-weight: 600;
font-size: 16px;
}
.gnb-right {
padding-right: 40px;
position:relative;
top:-20px;
}
.gnb-right li {
float: right;
padding: 0px;
padding-right: 20px;
color: orange;
}
.gnb-right li a {
color: #333;
font-weight: bolder;
font-size: 14px;
}
#header {
width: 100%;
height: 60px;
font-weight:bolder;
position: fixed;
background: #fff;
padding: 20px;
color: #000;
font-weight: 900;
font: 16px "Noto Sans KR", sans-serif;
z-index: 10000;
}
#menu {
width: 100%;
height: 60px; /* Footer height */
position: fixed;
top:60px;
font-weight:bold;
background: #2781C1;
padding: 20px;
z-index: 10000;
font: 16px "Noto Sans KR", sans-serif;
}
#footer {
margin: 0;
padding: 1rem;
color: #AAAAAA;
background-color: #333333;
position: fixed;
width: 100%;
display: block;
text-align: center;
right: 0;
bottom: 0;
left: 0;
bottom: 0;
}
ul, ol, li {
list-style: none;
}
a {
color: inherit;
text-decoration: none;
background-color: transparent;
font: 16px "Noto Sans KR", sans-serif;
color: #333;
}

View File

@ -0,0 +1,394 @@
@-webkit-keyframes passing-through {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30%, 70% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
-moz-transform: translateY(-40px);
-ms-transform: translateY(-40px);
-o-transform: translateY(-40px);
transform: translateY(-40px); } }
@-moz-keyframes passing-through {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30%, 70% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
-moz-transform: translateY(-40px);
-ms-transform: translateY(-40px);
-o-transform: translateY(-40px);
transform: translateY(-40px); } }
@keyframes passing-through {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30%, 70% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
-moz-transform: translateY(-40px);
-ms-transform: translateY(-40px);
-o-transform: translateY(-40px);
transform: translateY(-40px); } }
@-webkit-keyframes slide-in {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); } }
@-moz-keyframes slide-in {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); } }
@keyframes slide-in {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); } }
@-webkit-keyframes pulse {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
10% {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
@-moz-keyframes pulse {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
10% {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
@keyframes pulse {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
10% {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
.dropzone, .dropzone * {
box-sizing: border-box; }
.dropzone {
min-height: 80px; /* NLIB */
border: 2px solid rgba(0, 0, 0, 0.3);
background: white;
padding: 0px 10px; /* NLIB */
}
.dropzone.dz-clickable {
cursor: pointer; }
.dropzone.dz-clickable * {
cursor: default; }
.dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {
cursor: pointer; }
.dropzone.dz-started .dz-message {
display: none; }
.dropzone.dz-drag-hover {
border-style: solid; }
.dropzone.dz-drag-hover .dz-message {
opacity: 0.5; }
.dropzone .dz-message {
text-align: center;
margin: 1em 0; }
.dropzone .dz-message .dz-button {
background: none;
color: inherit;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
outline: inherit; }
.dropzone .dz-preview {
position: relative;
display: inline-block;
vertical-align: top;
margin: 16px;
min-height: 60px; /* NLIB */
}
.dropzone .dz-preview:hover {
z-index: 1000; }
.dropzone .dz-preview:hover .dz-details {
opacity: 1; }
.dropzone .dz-preview.dz-file-preview .dz-image {
border-radius: 20px;
background: #999;
background: linear-gradient(to bottom, #eee, #ddd); }
.dropzone .dz-preview.dz-file-preview .dz-details {
opacity: 1; }
.dropzone .dz-preview.dz-image-preview {
background: white; }
.dropzone .dz-preview.dz-image-preview .dz-details {
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
-ms-transition: opacity 0.2s linear;
-o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear; }
.dropzone .dz-preview .dz-remove {
font-size: 14px;
text-align: center;
display: block;
cursor: pointer;
border: none; }
.dropzone .dz-preview .dz-remove:hover {
text-decoration: underline; }
.dropzone .dz-preview:hover .dz-details {
opacity: 1; }
.dropzone .dz-preview .dz-details {
z-index: 20;
position: absolute;
top: 0;
left: 0;
opacity: 0;
font-size: 13px;
min-width: 100%;
max-width: 100%;
padding: 0em 1em; /* NLIB */
text-align: center;
color: rgba(0, 0, 0, 0.9);
line-height: 150%; }
.dropzone .dz-preview .dz-details .dz-size {
margin-bottom: 1em;
font-size: 16px; }
.dropzone .dz-preview .dz-details .dz-filename {
white-space: nowrap; }
.dropzone .dz-preview .dz-details .dz-filename:hover span {
border: 1px solid rgba(200, 200, 200, 0.8);
background-color: rgba(255, 255, 255, 0.8); }
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
overflow: hidden;
text-overflow: ellipsis; }
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
border: 1px solid transparent; }
.dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
background-color: rgba(255, 255, 255, 0.4);
padding: 0 0.4em;
border-radius: 3px; }
.dropzone .dz-preview:hover .dz-image img {
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
-webkit-filter: blur(8px);
filter: blur(8px); }
.dropzone .dz-preview .dz-image {
border-radius: 20px;
overflow: hidden;
width: 120px;
height: 60px; /* NLIB */
position: relative;
display: block;
z-index: 10; }
.dropzone .dz-preview .dz-image img {
display: block; }
.dropzone .dz-preview.dz-success .dz-success-mark {
-webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
-moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
-ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
-o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }
.dropzone .dz-preview.dz-error .dz-error-mark {
opacity: 1;
-webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
-moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
-ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
-o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }
.dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
pointer-events: none;
opacity: 0;
z-index: 500;
position: absolute;
display: block;
top: 50%;
left: 50%;
margin-left: -27px;
margin-top: -27px; }
.dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
display: block;
width: 54px;
height: 54px; }
.dropzone .dz-preview.dz-processing .dz-progress {
opacity: 1;
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-ms-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear; }
.dropzone .dz-preview.dz-complete .dz-progress {
opacity: 0;
-webkit-transition: opacity 0.4s ease-in;
-moz-transition: opacity 0.4s ease-in;
-ms-transition: opacity 0.4s ease-in;
-o-transition: opacity 0.4s ease-in;
transition: opacity 0.4s ease-in; }
.dropzone .dz-preview:not(.dz-processing) .dz-progress {
-webkit-animation: pulse 6s ease infinite;
-moz-animation: pulse 6s ease infinite;
-ms-animation: pulse 6s ease infinite;
-o-animation: pulse 6s ease infinite;
animation: pulse 6s ease infinite; }
.dropzone .dz-preview .dz-progress {
opacity: 1;
z-index: 1000;
pointer-events: none;
position: absolute;
height: 16px;
left: 50%;
top: 50%;
margin-top: -8px;
width: 80px;
margin-left: -40px;
background: rgba(255, 255, 255, 0.9);
-webkit-transform: scale(1);
border-radius: 8px;
overflow: hidden; }
.dropzone .dz-preview .dz-progress .dz-upload {
background: #333;
background: linear-gradient(to bottom, #666, #444);
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 0;
-webkit-transition: width 300ms ease-in-out;
-moz-transition: width 300ms ease-in-out;
-ms-transition: width 300ms ease-in-out;
-o-transition: width 300ms ease-in-out;
transition: width 300ms ease-in-out; }
.dropzone .dz-preview.dz-error .dz-error-message {
display: block; }
.dropzone .dz-preview.dz-error:hover .dz-error-message {
opacity: 1;
pointer-events: auto; }
.dropzone .dz-preview .dz-error-message {
pointer-events: none;
z-index: 1000;
position: absolute;
display: block;
display: none;
opacity: 0;
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
border-radius: 8px;
font-size: 13px;
top: 130px;
left: -10px;
width: 140px;
background: #be2626;
background: linear-gradient(to bottom, #be2626, #a92222);
padding: 0.5em 1.2em;
color: white; }
.dropzone .dz-preview .dz-error-message:after {
content: '';
position: absolute;
top: -6px;
left: 64px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #be2626; }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,392 @@
@-webkit-keyframes passing-through {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30%, 70% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
-moz-transform: translateY(-40px);
-ms-transform: translateY(-40px);
-o-transform: translateY(-40px);
transform: translateY(-40px); } }
@-moz-keyframes passing-through {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30%, 70% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
-moz-transform: translateY(-40px);
-ms-transform: translateY(-40px);
-o-transform: translateY(-40px);
transform: translateY(-40px); } }
@keyframes passing-through {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30%, 70% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
-moz-transform: translateY(-40px);
-ms-transform: translateY(-40px);
-o-transform: translateY(-40px);
transform: translateY(-40px); } }
@-webkit-keyframes slide-in {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); } }
@-moz-keyframes slide-in {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); } }
@keyframes slide-in {
0% {
opacity: 0;
-webkit-transform: translateY(40px);
-moz-transform: translateY(40px);
-ms-transform: translateY(40px);
-o-transform: translateY(40px);
transform: translateY(40px); }
30% {
opacity: 1;
-webkit-transform: translateY(0px);
-moz-transform: translateY(0px);
-ms-transform: translateY(0px);
-o-transform: translateY(0px);
transform: translateY(0px); } }
@-webkit-keyframes pulse {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
10% {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
@-moz-keyframes pulse {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
10% {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
@keyframes pulse {
0% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); }
10% {
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1); }
20% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1); } }
.dropzone, .dropzone * {
box-sizing: border-box; }
.dropzone {
min-height: 150px;
border: 2px solid rgba(0, 0, 0, 0.3);
background: white;
padding: 54px 54px; }
.dropzone.dz-clickable {
cursor: pointer; }
.dropzone.dz-clickable * {
cursor: default; }
.dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {
cursor: pointer; }
.dropzone.dz-started .dz-message {
display: none; }
.dropzone.dz-drag-hover {
border-style: solid; }
.dropzone.dz-drag-hover .dz-message {
opacity: 0.5; }
.dropzone .dz-message {
text-align: center;
margin: 2em 0; }
.dropzone .dz-message .dz-button {
background: none;
color: inherit;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
outline: inherit; }
.dropzone .dz-preview {
position: relative;
display: inline-block;
vertical-align: top;
margin: 16px;
min-height: 100px; }
.dropzone .dz-preview:hover {
z-index: 1000; }
.dropzone .dz-preview:hover .dz-details {
opacity: 1; }
.dropzone .dz-preview.dz-file-preview .dz-image {
border-radius: 20px;
background: #999;
background: linear-gradient(to bottom, #eee, #ddd); }
.dropzone .dz-preview.dz-file-preview .dz-details {
opacity: 1; }
.dropzone .dz-preview.dz-image-preview {
background: white; }
.dropzone .dz-preview.dz-image-preview .dz-details {
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
-ms-transition: opacity 0.2s linear;
-o-transition: opacity 0.2s linear;
transition: opacity 0.2s linear; }
.dropzone .dz-preview .dz-remove {
font-size: 14px;
text-align: center;
display: block;
cursor: pointer;
border: none; }
.dropzone .dz-preview .dz-remove:hover {
text-decoration: underline; }
.dropzone .dz-preview:hover .dz-details {
opacity: 1; }
.dropzone .dz-preview .dz-details {
z-index: 20;
position: absolute;
top: 0;
left: 0;
opacity: 0;
font-size: 13px;
min-width: 100%;
max-width: 100%;
padding: 2em 1em;
text-align: center;
color: rgba(0, 0, 0, 0.9);
line-height: 150%; }
.dropzone .dz-preview .dz-details .dz-size {
margin-bottom: 1em;
font-size: 16px; }
.dropzone .dz-preview .dz-details .dz-filename {
white-space: nowrap; }
.dropzone .dz-preview .dz-details .dz-filename:hover span {
border: 1px solid rgba(200, 200, 200, 0.8);
background-color: rgba(255, 255, 255, 0.8); }
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
overflow: hidden;
text-overflow: ellipsis; }
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
border: 1px solid transparent; }
.dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
background-color: rgba(255, 255, 255, 0.4);
padding: 0 0.4em;
border-radius: 3px; }
.dropzone .dz-preview:hover .dz-image img {
-webkit-transform: scale(1.05, 1.05);
-moz-transform: scale(1.05, 1.05);
-ms-transform: scale(1.05, 1.05);
-o-transform: scale(1.05, 1.05);
transform: scale(1.05, 1.05);
-webkit-filter: blur(8px);
filter: blur(8px); }
.dropzone .dz-preview .dz-image {
border-radius: 20px;
overflow: hidden;
width: 120px;
height: 120px;
position: relative;
display: block;
z-index: 10; }
.dropzone .dz-preview .dz-image img {
display: block; }
.dropzone .dz-preview.dz-success .dz-success-mark {
-webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
-moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
-ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
-o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }
.dropzone .dz-preview.dz-error .dz-error-mark {
opacity: 1;
-webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
-moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
-ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
-o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }
.dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
pointer-events: none;
opacity: 0;
z-index: 500;
position: absolute;
display: block;
top: 50%;
left: 50%;
margin-left: -27px;
margin-top: -27px; }
.dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
display: block;
width: 54px;
height: 54px; }
.dropzone .dz-preview.dz-processing .dz-progress {
opacity: 1;
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-ms-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear; }
.dropzone .dz-preview.dz-complete .dz-progress {
opacity: 0;
-webkit-transition: opacity 0.4s ease-in;
-moz-transition: opacity 0.4s ease-in;
-ms-transition: opacity 0.4s ease-in;
-o-transition: opacity 0.4s ease-in;
transition: opacity 0.4s ease-in; }
.dropzone .dz-preview:not(.dz-processing) .dz-progress {
-webkit-animation: pulse 6s ease infinite;
-moz-animation: pulse 6s ease infinite;
-ms-animation: pulse 6s ease infinite;
-o-animation: pulse 6s ease infinite;
animation: pulse 6s ease infinite; }
.dropzone .dz-preview .dz-progress {
opacity: 1;
z-index: 1000;
pointer-events: none;
position: absolute;
height: 16px;
left: 50%;
top: 50%;
margin-top: -8px;
width: 80px;
margin-left: -40px;
background: rgba(255, 255, 255, 0.9);
-webkit-transform: scale(1);
border-radius: 8px;
overflow: hidden; }
.dropzone .dz-preview .dz-progress .dz-upload {
background: #333;
background: linear-gradient(to bottom, #666, #444);
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 0;
-webkit-transition: width 300ms ease-in-out;
-moz-transition: width 300ms ease-in-out;
-ms-transition: width 300ms ease-in-out;
-o-transition: width 300ms ease-in-out;
transition: width 300ms ease-in-out; }
.dropzone .dz-preview.dz-error .dz-error-message {
display: block; }
.dropzone .dz-preview.dz-error:hover .dz-error-message {
opacity: 1;
pointer-events: auto; }
.dropzone .dz-preview .dz-error-message {
pointer-events: none;
z-index: 1000;
position: absolute;
display: block;
display: none;
opacity: 0;
-webkit-transition: opacity 0.3s ease;
-moz-transition: opacity 0.3s ease;
-ms-transition: opacity 0.3s ease;
-o-transition: opacity 0.3s ease;
transition: opacity 0.3s ease;
border-radius: 8px;
font-size: 13px;
top: 130px;
left: -10px;
width: 140px;
background: #be2626;
background: linear-gradient(to bottom, #be2626, #a92222);
padding: 0.5em 1.2em;
color: white; }
.dropzone .dz-preview .dz-error-message:after {
content: '';
position: absolute;
top: -6px;
left: 64px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #be2626; }

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,749 @@
/**
* Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
* http://cssreset.com
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline; }
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block; }
body {
line-height: 1; }
ol, ul {
list-style: none; }
blockquote, q {
quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none; }
table {
border-collapse: collapse;
border-spacing: 0; }
.hll {
background-color: #ffffcc; }
.c {
color: #408080;
font-style: italic; }
/* Comment */
.err {
border: 1px solid #FF0000; }
/* Error */
.k {
color: #008000;
font-weight: bold; }
/* Keyword */
.o {
color: #666666; }
/* Operator */
.cm {
color: #9AA5AD;
font-style: italic; }
/* Comment.Multiline */
.cp {
color: #BC7A00; }
/* Comment.Preproc */
.c1 {
color: #9AA5AD;
font-style: italic; }
/* Comment.Single */
.cs {
color: #408080;
font-style: italic; }
/* Comment.Special */
.gd {
color: #A00000; }
/* Generic.Deleted */
.ge {
font-style: italic; }
/* Generic.Emph */
.gr {
color: #FF0000; }
/* Generic.Error */
.gh {
color: #000080;
font-weight: bold; }
/* Generic.Heading */
.gi {
color: #00A000; }
/* Generic.Inserted */
.go {
color: #808080; }
/* Generic.Output */
.gp {
color: #000080;
font-weight: bold; }
/* Generic.Prompt */
.gs {
font-weight: bold; }
/* Generic.Strong */
.gu {
color: #800080;
font-weight: bold; }
/* Generic.Subheading */
.gt {
color: #0040D0; }
/* Generic.Traceback */
.kc {
color: #008000;
font-weight: bold; }
/* Keyword.Constant */
.kd {
color: #229EFF;
font-weight: bold; }
/* Keyword.Declaration */
.kn {
color: #008000;
font-weight: bold; }
/* Keyword.Namespace */
.kp {
color: #008000; }
/* Keyword.Pseudo */
.kr {
color: #008000;
font-weight: bold; }
/* Keyword.Reserved */
.kt {
color: #B00040; }
/* Keyword.Type */
.m {
color: #666666; }
/* Literal.Number */
.s {
color: #CB0C6A; }
/* Literal.String */
.na {
color: #C38D00; }
/* Name.Attribute */
.nb {
color: #008000; }
/* Name.Builtin */
.nc {
color: #0000FF;
font-weight: bold; }
/* Name.Class */
.no {
color: #880000; }
/* Name.Constant */
.nd {
color: #AA22FF; }
/* Name.Decorator */
.ni {
color: #999999;
font-weight: bold; }
/* Name.Entity */
.ne {
color: #D2413A;
font-weight: bold; }
/* Name.Exception */
.nf {
color: #0000FF; }
/* Name.Function */
.nl {
color: #A0A000; }
/* Name.Label */
.nn {
color: #0000FF;
font-weight: bold; }
/* Name.Namespace */
.nt {
color: #0081E5;
font-weight: bold; }
/* Name.Tag */
.nv {
color: #19177C; }
/* Name.Variable */
.ow {
color: #AA22FF;
font-weight: bold; }
/* Operator.Word */
.w {
color: #bbbbbb; }
/* Text.Whitespace */
.mf {
color: #666666; }
/* Literal.Number.Float */
.mh {
color: #666666; }
/* Literal.Number.Hex */
.mi {
color: #666666; }
/* Literal.Number.Integer */
.mo {
color: #666666; }
/* Literal.Number.Oct */
.sb {
color: #BA2121; }
/* Literal.String.Backtick */
.sc {
color: #BA2121; }
/* Literal.String.Char */
.sd {
color: #BA2121;
font-style: italic; }
/* Literal.String.Doc */
.s2 {
color: #D50069; }
/* Literal.String.Double */
.se {
color: #BB6622;
font-weight: bold; }
/* Literal.String.Escape */
.sh {
color: #BA2121; }
/* Literal.String.Heredoc */
.si {
color: #BB6688;
font-weight: bold; }
/* Literal.String.Interpol */
.sx {
color: #008000; }
/* Literal.String.Other */
.sr {
color: #BB6688; }
/* Literal.String.Regex */
.s1 {
color: #BA2121; }
/* Literal.String.Single */
.ss {
color: #19177C; }
/* Literal.String.Symbol */
.bp {
color: #008000; }
/* Name.Builtin.Pseudo */
.vc {
color: #19177C; }
/* Name.Variable.Class */
.vg {
color: #19177C; }
/* Name.Variable.Global */
.vi {
color: #19177C; }
/* Name.Variable.Instance */
.il {
color: #666666; }
/* Literal.Number.Integer.Long */
.nx {
color: #4C556B; }
#dropzone {
margin-bottom: 3rem; }
.dropzone {
border: 2px dashed #0087F7;
border-radius: 5px;
background: white; }
.dropzone .dz-message {
font-weight: 400; }
.dropzone .dz-message .note {
font-size: 0.8em;
font-weight: 200;
display: block;
margin-top: 1.4rem; }
*, *:before, *:after {
box-sizing: border-box; }
html, body {
height: 100%;
font-family: Roboto, "Open Sans", sans-serif;
font-size: 20px;
font-weight: 300;
line-height: 1.4rem;
background: #F3F4F5;
color: #646C7F;
text-rendering: optimizeLegibility; }
@media (max-width: 600px) {
html, body {
font-size: 18px; } }
@media (max-width: 400px) {
html, body {
font-size: 16px; } }
h1, h2, h3, table th, table th .header {
font-size: 1.8rem;
color: #0087F7;
-webkit-font-smoothing: antialiased;
line-height: 2.2rem; }
h1, h2, h3 {
margin-top: 2.8rem;
margin-bottom: 1.4rem; }
h2 {
font-size: 1.4rem; }
h1.anchor, h2.anchor {
margin: 0;
padding: 0;
height: 1px;
overflow: hidden;
visibility: hidden; }
table th {
font-size: 1.4rem;
color: #646C7F; }
ul, ol {
list-style-position: inside; }
a {
color: #0087F7;
text-decoration: none; }
a:hover {
border-bottom: 2px solid #0087F7; }
p {
margin: 1.4rem 0; }
strong {
font-weight: 400; }
em {
font-style: italic; }
code {
font-family: Inconsolata, monospace;
background: rgba(0, 135, 247, 0.04);
padding: 0.2em 0.4em; }
.highlight code, td:first-child code {
background: none;
padding: 0; }
aside {
font-size: 0.8em;
color: rgba(0, 0, 0, 0.4); }
hr {
border: none;
background: none;
position: relative;
height: 2.8rem; }
hr:after {
content: "";
position: absolute;
top: 1.4rem;
left: 0;
right: 0;
height: 1px;
background: rgba(0, 0, 0, 0.1); }
ul li {
list-style-type: disc;
padding-top: 0.7rem;
padding-bottom: 0.7rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
ul li:last-of-type {
border: none; }
.highlight {
padding: 1.4rem;
overflow: auto;
background: rgba(100, 108, 128, 0.04);
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
.bitcoin {
overflow: auto; }
blockquote {
color: #0087F7;
font-size: 1.2rem;
line-height: 2rem;
-webkit-font-smoothing: antialiased;
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
blockquote a {
border-bottom: 1px solid #0087F7; }
body > header {
position: relative;
padding: 2.8rem 1.4rem;
z-index: 10; }
body > header .content {
opacity: 1;
background: #F3F4F5;
z-index: 10; }
body > header .content > * {
max-width: 700px; }
body > header .content h1 {
margin-bottom: 2.8rem;
margin-top: 0; }
body > header .content h1 img {
max-width: 100%; }
body > header .content h1 span {
display: none; }
@media (min-width: 700px) {
body > header #social-buttons {
display: inline-block;
position: absolute;
top: 0.5em;
right: 0;
opacity: 0.5;
-webkit-transition: opacity 0.2s ease;
-moz-transition: opacity 0.2s ease;
-ms-transition: opacity 0.2s ease;
-o-transition: opacity 0.2s ease;
transition: opacity 0.2s ease; }
body > header #social-buttons:hover {
opacity: 1; } }
body > header #social-buttons .social-button {
display: inline-block; }
body > header #social-buttons .social-button.facebook-social-button .fb-like > span {
vertical-align: top !important;
top: 1px; }
body > header .scroll-invitation {
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
body > header .scroll-invitation a {
display: block;
width: 56px;
height: 56px;
background: url("../images/arrow.svg") no-repeat; }
body > header .scroll-invitation a:hover {
text-decoration: none;
border: none;
background-image: url("../images/arrow-hover.svg"); }
body > header .scroll-invitation a span {
display: none; }
@media (min-width: 700px) {
body > header {
height: 100vh;
margin-bottom: 0; }
body > header .content {
position: relative;
top: 50%;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%); } }
@media (min-width: 900px) {
body > header {
padding-left: 15%; }
body > header .content h1 {
margin-bottom: 4.2rem; }
body > header .content h1 img {
width: 550px; }
body > header .content h2 {
font-size: 1.5em;
line-height: 1.4em; } }
@media (min-width: 1100px) {
body > header {
font-size: 1em;
line-height: 1.5em; }
body > header .content h1 {
margin-bottom: 5.6rem; }
body > header .content h1 img {
width: 700px; }
body > header .content > * {
max-width: 900px; }
body > header h2 {
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
body > header .scroll-invitation {
margin-top: 5.6rem; } }
main > nav {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 220px;
background: #028AF4;
padding: 1.4rem 0;
z-index: 200;
overflow: auto;
display: none; }
main > nav.fixed {
position: fixed; }
main > nav img {
margin: 0 0 1.4rem 1.4rem;
width: 58px;
height: 58px; }
main > nav a:not(.logo) {
display: block;
line-height: 1.4rem;
color: rgba(255, 255, 255, 0.9);
border: none;
padding: 0.7rem 1.4rem;
font-size: 0.8rem;
-webkit-font-smoothing: subpixel-antialiased; }
main > nav a:not(.logo):hover {
background: rgba(255, 255, 255, 0.3); }
main > nav .sub-sections {
height: 0;
overflow: hidden;
-webkit-transition: height 0.4s ease;
-moz-transition: height 0.4s ease;
-ms-transition: height 0.4s ease;
-o-transition: height 0.4s ease;
transition: height 0.4s ease; }
main > nav .visible {
background: rgba(255, 255, 255, 0.13); }
main > nav .visible .sub-sections {
display: block; }
main > nav a.current {
background: #4DADF7; }
main > nav .level-0 > a {
font-weight: 400; }
main > nav .level-1 > a {
padding-left: 1.9rem;
color: rgba(255, 255, 255, 0.7); }
@media (min-width: 940px) {
main {
padding-left: 220px; }
main > nav {
display: block; } }
form.donate {
display: inline-block;
vertical-align: bottom;
position: relative;
top: 0.25em;
margin: 0 0em 0 0.2em; }
main {
position: relative;
z-index: 100; }
main section {
padding: 1.4rem 1.4rem 2.8rem 1.4rem; }
main section:last-of-type {
padding-bottom: 8.4rem; }
main section h1, main section h2 {
margin-top: 0;
padding-top: 2.8rem; }
main section > * {
max-width: 720px;
margin-left: auto;
margin-right: auto; }
main section > *.highlight {
max-width: 900px; }
main section > table {
max-width: 80rem; }
main section .video-grid {
display: flex;
justify-content: space-between;
margin-top: 1.5rem; }
main section .video-grid .video-grid__cell {
display: block;
position: relative;
flex: 1;
margin-left: 1.5rem; }
main section .video-grid .video-grid__cell:first-child {
margin-left: 0; }
main section .video-grid .video-grid__cell:after {
content: '';
padding-top: 56.25%;
display: block; }
main section .video-grid .video-grid__cell iframe {
display: block;
position: absolute;
width: 100%;
height: 100%; }
main section .embedded-video {
position: relative;
width: 100%; }
main section .embedded-video:after {
content: '';
padding-top: 56.25%;
display: block; }
main section .embedded-video iframe {
display: block;
position: absolute;
width: 100%;
height: 100%; }
main section:nth-child(odd) {
background: #F3F4F5; }
main section:nth-child(even) {
background: #E8E9EC; }
main section.news {
background: #646C7F;
color: white; }
main section.news h1, main section.news h2 {
color: white;
-webkit-font-smoothing: subpixel-antialiased; }
main section.news a {
color: #C0E3FE;
border-color: #C0E3FE; }
main .configuration-table-container {
max-width: 100%;
overflow-x: scroll; }
main table {
font-size: 0.9rem;
margin-top: 1.4rem;
margin-bottom: 4.2rem;
border: 1px solid #38A0FE;
border-bottom: none;
background: white; }
main table th:first-of-type,
main table td:first-of-type {
text-align: right; }
main table th, main table td {
text-align: left;
border-bottom: 1px solid #38A0FE;
padding: 0.7rem 1.4rem; }
main table td:first-of-type, main table th:first-of-type {
border-right: 1px solid #38A0FE; }
main table a.default-value {
display: block;
font-weight: normal;
color: rgba(0, 88, 160, 0.3);
font-size: 0.9em; }
main table a.default-value:hover {
border: none;
color: #0087F7; }
main table td:first-of-type {
font-weight: bold;
color: #0087F7; }
main table th.title {
text-align: center;
padding-top: 2.8rem;
padding-bottom: 2.8rem; }
main table th.title p {
margin-bottom: 0; }
main table td.separator {
font-weight: normal;
text-align: left;
color: #646C7F; }
main table p {
margin: 0; }
@media (max-width: 600px) {
main table table, main table tbody, main table thead, main table tr, main table td, main table th {
display: block; }
main table a.default-value {
display: inline;
margin-left: 0.5em; }
main table td, main table th {
overflow: auto; }
main table td:first-of-type, main table th:first-of-type {
text-align: left;
border-right: none; }
main table td.label {
border-bottom-color: rgba(0, 135, 247, 0.15); }
main table th.title {
padding-top: 1.4rem;
padding-bottom: 1.4rem; }
main table th:not(.title) {
display: none; } }
footer {
background: #2D3038;
z-index: 5000;
position: relative;
display: block;
padding: 1.4rem 1.4rem 2.8rem 1.4rem;
font-size: 0.9rem;
color: white; }
footer * {
color: white; }
footer a:hover {
border-color: white; }
footer > * {
max-width: 720px;
margin-left: auto;
margin-right: auto; }
@media (min-width: 720px) {
footer .license {
text-align: justify; } }
footer .logo {
margin: 2.8rem 0;
width: 270px; }
.for-hire {
text-align: center;
padding: 1em 2em;
background: rgba(255, 255, 255, 0.1);
border-radius: 0.3rem;
line-height: 1.5em; }
.for-hire h1 {
padding: 0;
margin: 1.5rem 0 3rem; }
.for-hire h1 img {
max-width: 100%;
height: auto; }

View File

@ -0,0 +1,749 @@
/**
* Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
* http://cssreset.com
*/
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline; }
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block; }
body {
line-height: 1; }
ol, ul {
list-style: none; }
blockquote, q {
quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none; }
table {
border-collapse: collapse;
border-spacing: 0; }
.hll {
background-color: #ffffcc; }
.c {
color: #408080;
font-style: italic; }
/* Comment */
.err {
border: 1px solid #FF0000; }
/* Error */
.k {
color: #008000;
font-weight: bold; }
/* Keyword */
.o {
color: #666666; }
/* Operator */
.cm {
color: #9AA5AD;
font-style: italic; }
/* Comment.Multiline */
.cp {
color: #BC7A00; }
/* Comment.Preproc */
.c1 {
color: #9AA5AD;
font-style: italic; }
/* Comment.Single */
.cs {
color: #408080;
font-style: italic; }
/* Comment.Special */
.gd {
color: #A00000; }
/* Generic.Deleted */
.ge {
font-style: italic; }
/* Generic.Emph */
.gr {
color: #FF0000; }
/* Generic.Error */
.gh {
color: #000080;
font-weight: bold; }
/* Generic.Heading */
.gi {
color: #00A000; }
/* Generic.Inserted */
.go {
color: #808080; }
/* Generic.Output */
.gp {
color: #000080;
font-weight: bold; }
/* Generic.Prompt */
.gs {
font-weight: bold; }
/* Generic.Strong */
.gu {
color: #800080;
font-weight: bold; }
/* Generic.Subheading */
.gt {
color: #0040D0; }
/* Generic.Traceback */
.kc {
color: #008000;
font-weight: bold; }
/* Keyword.Constant */
.kd {
color: #229EFF;
font-weight: bold; }
/* Keyword.Declaration */
.kn {
color: #008000;
font-weight: bold; }
/* Keyword.Namespace */
.kp {
color: #008000; }
/* Keyword.Pseudo */
.kr {
color: #008000;
font-weight: bold; }
/* Keyword.Reserved */
.kt {
color: #B00040; }
/* Keyword.Type */
.m {
color: #666666; }
/* Literal.Number */
.s {
color: #CB0C6A; }
/* Literal.String */
.na {
color: #C38D00; }
/* Name.Attribute */
.nb {
color: #008000; }
/* Name.Builtin */
.nc {
color: #0000FF;
font-weight: bold; }
/* Name.Class */
.no {
color: #880000; }
/* Name.Constant */
.nd {
color: #AA22FF; }
/* Name.Decorator */
.ni {
color: #999999;
font-weight: bold; }
/* Name.Entity */
.ne {
color: #D2413A;
font-weight: bold; }
/* Name.Exception */
.nf {
color: #0000FF; }
/* Name.Function */
.nl {
color: #A0A000; }
/* Name.Label */
.nn {
color: #0000FF;
font-weight: bold; }
/* Name.Namespace */
.nt {
color: #0081E5;
font-weight: bold; }
/* Name.Tag */
.nv {
color: #19177C; }
/* Name.Variable */
.ow {
color: #AA22FF;
font-weight: bold; }
/* Operator.Word */
.w {
color: #bbbbbb; }
/* Text.Whitespace */
.mf {
color: #666666; }
/* Literal.Number.Float */
.mh {
color: #666666; }
/* Literal.Number.Hex */
.mi {
color: #666666; }
/* Literal.Number.Integer */
.mo {
color: #666666; }
/* Literal.Number.Oct */
.sb {
color: #BA2121; }
/* Literal.String.Backtick */
.sc {
color: #BA2121; }
/* Literal.String.Char */
.sd {
color: #BA2121;
font-style: italic; }
/* Literal.String.Doc */
.s2 {
color: #D50069; }
/* Literal.String.Double */
.se {
color: #BB6622;
font-weight: bold; }
/* Literal.String.Escape */
.sh {
color: #BA2121; }
/* Literal.String.Heredoc */
.si {
color: #BB6688;
font-weight: bold; }
/* Literal.String.Interpol */
.sx {
color: #008000; }
/* Literal.String.Other */
.sr {
color: #BB6688; }
/* Literal.String.Regex */
.s1 {
color: #BA2121; }
/* Literal.String.Single */
.ss {
color: #19177C; }
/* Literal.String.Symbol */
.bp {
color: #008000; }
/* Name.Builtin.Pseudo */
.vc {
color: #19177C; }
/* Name.Variable.Class */
.vg {
color: #19177C; }
/* Name.Variable.Global */
.vi {
color: #19177C; }
/* Name.Variable.Instance */
.il {
color: #666666; }
/* Literal.Number.Integer.Long */
.nx {
color: #4C556B; }
#dropzone {
margin-bottom: 3rem; }
.dropzone {
border: 2px dashed #0087F7;
border-radius: 5px;
background: white; }
.dropzone .dz-message {
font-weight: 400; }
.dropzone .dz-message .note {
font-size: 0.8em;
font-weight: 200;
display: block;
margin-top: 1.3rem; }
*, *:before, *:after {
box-sizing: border-box; }
html, body {
height: 100%;
font-family: Roboto, "Open Sans", sans-serif;
font-size: 20px;
font-weight: 300;
line-height: 1.4rem;
background: #F3F4F5;
color: #646C7F;
text-rendering: optimizeLegibility; }
@media (max-width: 600px) {
html, body {
font-size: 18px; } }
@media (max-width: 400px) {
html, body {
font-size: 16px; } }
h1, h2, h3, table th, table th .header {
font-size: 1.8rem;
color: #0087F7;
-webkit-font-smoothing: antialiased;
line-height: 2.2rem; }
h1, h2, h3 {
margin-top: 2.8rem;
margin-bottom: 1.4rem; }
h2 {
font-size: 1.4rem; }
h1.anchor, h2.anchor {
margin: 0;
padding: 0;
height: 1px;
overflow: hidden;
visibility: hidden; }
table th {
font-size: 1.4rem;
color: #646C7F; }
ul, ol {
list-style-position: inside; }
a {
color: #0087F7;
text-decoration: none; }
a:hover {
border-bottom: 2px solid #0087F7; }
p {
margin: 1.4rem 0; }
strong {
font-weight: 400; }
em {
font-style: italic; }
code {
font-family: Inconsolata, monospace;
background: rgba(0, 135, 247, 0.04);
padding: 0.2em 0.4em; }
.highlight code, td:first-child code {
background: none;
padding: 0; }
aside {
font-size: 0.8em;
color: rgba(0, 0, 0, 0.4); }
hr {
border: none;
background: none;
position: relative;
height: 2.8rem; }
hr:after {
content: "";
position: absolute;
top: 1.4rem;
left: 0;
right: 0;
height: 1px;
background: rgba(0, 0, 0, 0.1); }
ul li {
list-style-type: disc;
padding-top: 0.7rem;
padding-bottom: 0.7rem;
border-bottom: 1px solid rgba(0, 0, 0, 0.1); }
ul li:last-of-type {
border: none; }
.highlight {
padding: 1.4rem;
overflow: auto;
background: rgba(100, 108, 128, 0.04);
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
.bitcoin {
overflow: auto; }
blockquote {
color: #0087F7;
font-size: 1.2rem;
line-height: 2rem;
-webkit-font-smoothing: antialiased;
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
blockquote a {
border-bottom: 1px solid #0087F7; }
body > header {
position: relative;
padding: 2.8rem 1.4rem;
z-index: 10; }
body > header .content {
opacity: 1;
background: #F3F4F5;
z-index: 10; }
body > header .content > * {
max-width: 700px; }
body > header .content h1 {
margin-bottom: 2.8rem;
margin-top: 0; }
body > header .content h1 img {
max-width: 100%; }
body > header .content h1 span {
display: none; }
@media (min-width: 700px) {
body > header #social-buttons {
display: inline-block;
position: absolute;
top: 0.5em;
right: 0;
opacity: 0.5;
-webkit-transition: opacity 0.2s ease;
-moz-transition: opacity 0.2s ease;
-ms-transition: opacity 0.2s ease;
-o-transition: opacity 0.2s ease;
transition: opacity 0.2s ease; }
body > header #social-buttons:hover {
opacity: 1; } }
body > header #social-buttons .social-button {
display: inline-block; }
body > header #social-buttons .social-button.facebook-social-button .fb-like > span {
vertical-align: top !important;
top: 1px; }
body > header .scroll-invitation {
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
body > header .scroll-invitation a {
display: block;
width: 56px;
height: 56px;
background: url("../images/arrow.svg") no-repeat; }
body > header .scroll-invitation a:hover {
text-decoration: none;
border: none;
background-image: url("../images/arrow-hover.svg"); }
body > header .scroll-invitation a span {
display: none; }
@media (min-width: 700px) {
body > header {
height: 100vh;
margin-bottom: 0; }
body > header .content {
position: relative;
top: 50%;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%); } }
@media (min-width: 900px) {
body > header {
padding-left: 15%; }
body > header .content h1 {
margin-bottom: 4.2rem; }
body > header .content h1 img {
width: 550px; }
body > header .content h2 {
font-size: 1.5em;
line-height: 1.4em; } }
@media (min-width: 1100px) {
body > header {
font-size: 1em;
line-height: 1.5em; }
body > header .content h1 {
margin-bottom: 5.6rem; }
body > header .content h1 img {
width: 700px; }
body > header .content > * {
max-width: 900px; }
body > header h2 {
margin-top: 2.8rem;
margin-bottom: 2.8rem; }
body > header .scroll-invitation {
margin-top: 5.6rem; } }
main > nav {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 220px;
background: #028AF4;
padding: 1.4rem 0;
z-index: 200;
overflow: auto;
display: none; }
main > nav.fixed {
position: fixed; }
main > nav img {
margin: 0 0 1.4rem 1.4rem;
width: 58px;
height: 58px; }
main > nav a:not(.logo) {
display: block;
line-height: 1.4rem;
color: rgba(255, 255, 255, 0.9);
border: none;
padding: 0.7rem 1.4rem;
font-size: 0.8rem;
-webkit-font-smoothing: subpixel-antialiased; }
main > nav a:not(.logo):hover {
background: rgba(255, 255, 255, 0.3); }
main > nav .sub-sections {
height: 0;
overflow: hidden;
-webkit-transition: height 0.4s ease;
-moz-transition: height 0.4s ease;
-ms-transition: height 0.4s ease;
-o-transition: height 0.4s ease;
transition: height 0.4s ease; }
main > nav .visible {
background: rgba(255, 255, 255, 0.13); }
main > nav .visible .sub-sections {
display: block; }
main > nav a.current {
background: #4DADF7; }
main > nav .level-0 > a {
font-weight: 400; }
main > nav .level-1 > a {
padding-left: 1.9rem;
color: rgba(255, 255, 255, 0.7); }
@media (min-width: 940px) {
main {
padding-left: 220px; }
main > nav {
display: block; } }
form.donate {
display: inline-block;
vertical-align: bottom;
position: relative;
top: 0.25em;
margin: 0 0em 0 0.2em; }
main {
position: relative;
z-index: 100; }
main section {
padding: 1.4rem 1.4rem 2.8rem 1.4rem; }
main section:last-of-type {
padding-bottom: 8.4rem; }
main section h1, main section h2 {
margin-top: 0;
padding-top: 2.8rem; }
main section > * {
max-width: 720px;
margin-left: auto;
margin-right: auto; }
main section > *.highlight {
max-width: 900px; }
main section > table {
max-width: 80rem; }
main section .video-grid {
display: flex;
justify-content: space-between;
margin-top: 1.5rem; }
main section .video-grid .video-grid__cell {
display: block;
position: relative;
flex: 1;
margin-left: 1.5rem; }
main section .video-grid .video-grid__cell:first-child {
margin-left: 0; }
main section .video-grid .video-grid__cell:after {
content: '';
padding-top: 56.25%;
display: block; }
main section .video-grid .video-grid__cell iframe {
display: block;
position: absolute;
width: 100%;
height: 100%; }
main section .embedded-video {
position: relative;
width: 100%; }
main section .embedded-video:after {
content: '';
padding-top: 56.25%;
display: block; }
main section .embedded-video iframe {
display: block;
position: absolute;
width: 100%;
height: 100%; }
main section:nth-child(odd) {
background: #F3F4F5; }
main section:nth-child(even) {
background: #E8E9EC; }
main section.news {
background: #646C7F;
color: white; }
main section.news h1, main section.news h2 {
color: white;
-webkit-font-smoothing: subpixel-antialiased; }
main section.news a {
color: #C0E3FE;
border-color: #C0E3FE; }
main .configuration-table-container {
max-width: 100%;
overflow-x: scroll; }
main table {
font-size: 0.9rem;
margin-top: 1.4rem;
margin-bottom: 4.2rem;
border: 1px solid #38A0FE;
border-bottom: none;
background: white; }
main table th:first-of-type,
main table td:first-of-type {
text-align: right; }
main table th, main table td {
text-align: left;
border-bottom: 1px solid #38A0FE;
padding: 0.7rem 1.4rem; }
main table td:first-of-type, main table th:first-of-type {
border-right: 1px solid #38A0FE; }
main table a.default-value {
display: block;
font-weight: normal;
color: rgba(0, 88, 160, 0.3);
font-size: 0.9em; }
main table a.default-value:hover {
border: none;
color: #0087F7; }
main table td:first-of-type {
font-weight: bold;
color: #0087F7; }
main table th.title {
text-align: center;
padding-top: 2.8rem;
padding-bottom: 2.8rem; }
main table th.title p {
margin-bottom: 0; }
main table td.separator {
font-weight: normal;
text-align: left;
color: #646C7F; }
main table p {
margin: 0; }
@media (max-width: 600px) {
main table table, main table tbody, main table thead, main table tr, main table td, main table th {
display: block; }
main table a.default-value {
display: inline;
margin-left: 0.5em; }
main table td, main table th {
overflow: auto; }
main table td:first-of-type, main table th:first-of-type {
text-align: left;
border-right: none; }
main table td.label {
border-bottom-color: rgba(0, 135, 247, 0.15); }
main table th.title {
padding-top: 1.4rem;
padding-bottom: 1.4rem; }
main table th:not(.title) {
display: none; } }
footer {
background: #2D3038;
z-index: 5000;
position: relative;
display: block;
padding: 1.4rem 1.4rem 2.8rem 1.4rem;
font-size: 0.9rem;
color: white; }
footer * {
color: white; }
footer a:hover {
border-color: white; }
footer > * {
max-width: 720px;
margin-left: auto;
margin-right: auto; }
@media (min-width: 720px) {
footer .license {
text-align: justify; } }
footer .logo {
margin: 2.8rem 0;
width: 270px; }
.for-hire {
text-align: center;
padding: 1em 2em;
background: rgba(255, 255, 255, 0.1);
border-radius: 0.3rem;
line-height: 1.5em; }
.for-hire h1 {
padding: 0;
margin: 1.5rem 0 3rem; }
.for-hire h1 img {
max-width: 100%;
height: auto; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

1309
src/main/webapp/js/jquery-ui/jquery-ui.css vendored Normal file

File diff suppressed because it is too large Load Diff

18626
src/main/webapp/js/jquery-ui/jquery-ui.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,886 @@
/*!
* jQuery UI CSS Framework 1.12.0-rc.2
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*
* http://api.jqueryui.com/category/theming/
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
display: none;
}
.ui-helper-hidden-accessible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.ui-helper-reset {
margin: 0;
padding: 0;
border: 0;
outline: 0;
line-height: 1.3;
text-decoration: none;
font-size: 100%;
list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
content: "";
display: table;
border-collapse: collapse;
}
.ui-helper-clearfix:after {
clear: both;
}
.ui-helper-zfix {
width: 100%;
height: 100%;
top: 0;
left: 0;
position: absolute;
opacity: 0;
filter:Alpha(Opacity=0); /* support: IE8 */
}
.ui-front {
z-index: 100;
}
/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
cursor: default !important;
pointer-events: none;
}
/* Icons
----------------------------------*/
.ui-icon {
display: inline-block;
vertical-align: middle;
margin-top: -.25em;
position: relative;
text-indent: -99999px;
overflow: hidden;
background-repeat: no-repeat;
}
.ui-widget-icon-block {
left: 50%;
margin-left: -8px;
display: block;
}
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.ui-accordion .ui-accordion-header {
display: block;
cursor: pointer;
position: relative;
margin: 2px 0 0 0;
padding: .5em .5em .5em .7em;
font-size: 100%;
}
.ui-accordion .ui-accordion-content {
padding: 1em 2.2em;
border-top: 0;
overflow: auto;
}
.ui-autocomplete {
position: absolute;
top: 0;
left: 0;
cursor: default;
}
.ui-menu {
list-style: none;
padding: 0;
margin: 0;
display: block;
outline: 0;
}
.ui-menu .ui-menu {
position: absolute;
}
.ui-menu .ui-menu-item {
margin: 0;
cursor: pointer;
/* support: IE10, see #8844 */
list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
}
.ui-menu .ui-menu-item-wrapper {
position: relative;
padding: 3px 1em 3px .4em;
}
.ui-menu .ui-menu-divider {
margin: 5px 0;
height: 0;
font-size: 0;
line-height: 0;
border-width: 1px 0 0 0;
}
.ui-menu .ui-state-focus,
.ui-menu .ui-state-active {
margin: -1px;
}
/* icon support */
.ui-menu-icons {
position: relative;
}
.ui-menu-icons .ui-menu-item-wrapper {
padding-left: 2em;
}
/* left-aligned */
.ui-menu .ui-icon {
position: absolute;
top: 0;
bottom: 0;
left: .2em;
margin: auto 0;
}
/* right-aligned */
.ui-menu .ui-menu-icon {
left: auto;
right: 0;
}
.ui-button {
padding: .4em 1em;
display: inline-block;
position: relative;
line-height: normal;
margin-right: .1em;
cursor: pointer;
vertical-align: middle;
text-align: center;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Support: IE <= 11 */
overflow: visible;
}
.ui-button,
.ui-button:link,
.ui-button:visited,
.ui-button:hover,
.ui-button:active {
text-decoration: none;
}
/* to make room for the icon, a width needs to be set here */
.ui-button-icon-only {
width: 2em;
box-sizing: border-box;
text-indent: -9999px;
white-space: nowrap;
}
/* no icon support for input elements */
input.ui-button.ui-button-icon-only {
text-indent: 0;
}
/* button icon element(s) */
.ui-button-icon-only .ui-icon {
position: absolute;
top: 50%;
left: 50%;
margin-top: -8px;
margin-left: -8px;
}
.ui-button.ui-icon-notext .ui-icon {
padding: 0;
width: 2.1em;
height: 2.1em;
text-indent: -9999px;
white-space: nowrap;
}
input.ui-button.ui-icon-notext .ui-icon {
width: auto;
height: auto;
text-indent: 0;
white-space: normal;
padding: .4em 1em;
}
/* workarounds */
/* Support: Firefox 5 - 40 */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
border: 0;
padding: 0;
}
.ui-controlgroup {
vertical-align: middle;
display: inline-block;
}
.ui-controlgroup > .ui-controlgroup-item {
float: left;
margin-left: 0;
margin-right: 0;
}
.ui-controlgroup > .ui-controlgroup-item:focus,
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
z-index: 9999;
}
.ui-controlgroup-vertical > .ui-controlgroup-item {
display: block;
float: none;
width: 100%;
margin-top: 0;
margin-bottom: 0;
text-align: left;
}
.ui-controlgroup-vertical .ui-controlgroup-item {
box-sizing: border-box;
}
.ui-controlgroup .ui-controlgroup-label {
padding: .4em 1em;
}
.ui-controlgroup .ui-controlgroup-label span {
font-size: 80%;
}
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
border-left: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
border-top: none;
}
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
border-right: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
border-bottom: none;
}
/* Spinner specific style fixes */
.ui-controlgroup-vertical .ui-spinner-input {
/* Support: IE8 only, Android < 4.4 only */
width: 75%;
width: calc( 100% - 2.4em );
}
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
border-top-style: solid;
}
.ui-checkboxradio-label .ui-icon-background {
box-shadow: inset 1px 1px 1px #ccc;
border-radius: .12em;
border: none;
}
.ui-checkboxradio-radio-label .ui-icon-background {
width: 16px;
height: 16px;
border-radius: 1em;
overflow: visible;
border: none;
}
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
background-image: none;
width: 8px;
height: 8px;
border-width: 4px;
border-style: solid;
}
.ui-checkboxradio-disabled {
pointer-events: none;
}
.ui-datepicker {
width: 17em;
padding: .2em .2em 0;
display: none;
}
.ui-datepicker .ui-datepicker-header {
position: relative;
padding: .2em 0;
}
.ui-datepicker .ui-datepicker-prev,
.ui-datepicker .ui-datepicker-next {
position: absolute;
top: 2px;
width: 1.8em;
height: 1.8em;
}
.ui-datepicker .ui-datepicker-prev-hover,
.ui-datepicker .ui-datepicker-next-hover {
top: 1px;
}
.ui-datepicker .ui-datepicker-prev {
left: 2px;
}
.ui-datepicker .ui-datepicker-next {
right: 2px;
}
.ui-datepicker .ui-datepicker-prev-hover {
left: 1px;
}
.ui-datepicker .ui-datepicker-next-hover {
right: 1px;
}
.ui-datepicker .ui-datepicker-prev span,
.ui-datepicker .ui-datepicker-next span {
display: block;
position: absolute;
left: 50%;
margin-left: -8px;
top: 50%;
margin-top: -8px;
}
.ui-datepicker .ui-datepicker-title {
margin: 0 2.3em;
line-height: 1.8em;
text-align: center;
}
.ui-datepicker .ui-datepicker-title select {
font-size: 1em;
margin: 1px 0;
}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
width: 45%;
}
.ui-datepicker table {
width: 100%;
font-size: .9em;
border-collapse: collapse;
margin: 0 0 .4em;
}
.ui-datepicker th {
padding: .7em .3em;
text-align: center;
font-weight: bold;
border: 0;
}
.ui-datepicker td {
border: 0;
padding: 1px;
}
.ui-datepicker td span,
.ui-datepicker td a {
display: block;
padding: .2em;
text-align: right;
text-decoration: none;
}
.ui-datepicker .ui-datepicker-buttonpane {
background-image: none;
margin: .7em 0 0 0;
padding: 0 .2em;
border-left: 0;
border-right: 0;
border-bottom: 0;
}
.ui-datepicker .ui-datepicker-buttonpane button {
float: right;
margin: .5em .2em .4em;
cursor: pointer;
padding: .2em .6em .3em .6em;
width: auto;
overflow: visible;
}
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
float: left;
}
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi {
width: auto;
}
.ui-datepicker-multi .ui-datepicker-group {
float: left;
}
.ui-datepicker-multi .ui-datepicker-group table {
width: 95%;
margin: 0 auto .4em;
}
.ui-datepicker-multi-2 .ui-datepicker-group {
width: 50%;
}
.ui-datepicker-multi-3 .ui-datepicker-group {
width: 33.3%;
}
.ui-datepicker-multi-4 .ui-datepicker-group {
width: 25%;
}
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
border-left-width: 0;
}
.ui-datepicker-multi .ui-datepicker-buttonpane {
clear: left;
}
.ui-datepicker-row-break {
clear: both;
width: 100%;
font-size: 0;
}
/* RTL support */
.ui-datepicker-rtl {
direction: rtl;
}
.ui-datepicker-rtl .ui-datepicker-prev {
right: 2px;
left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next {
left: 2px;
right: auto;
}
.ui-datepicker-rtl .ui-datepicker-prev:hover {
right: 1px;
left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next:hover {
left: 1px;
right: auto;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane {
clear: right;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
float: left;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
.ui-datepicker-rtl .ui-datepicker-group {
float: right;
}
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
border-right-width: 0;
border-left-width: 1px;
}
/* Icons */
.ui-datepicker .ui-icon {
display: block;
text-indent: -99999px;
overflow: hidden;
background-repeat: no-repeat;
left: .5em;
top: .3em;
}
.ui-dialog {
position: absolute;
top: 0;
left: 0;
padding: .2em;
outline: 0;
}
.ui-dialog .ui-dialog-titlebar {
padding: .4em 1em;
position: relative;
}
.ui-dialog .ui-dialog-title {
float: left;
margin: .1em 0;
white-space: nowrap;
width: 90%;
overflow: hidden;
text-overflow: ellipsis;
}
.ui-dialog .ui-dialog-titlebar-close {
position: absolute;
right: .3em;
top: 50%;
width: 20px;
margin: -10px 0 0 0;
padding: 1px;
height: 20px;
}
.ui-dialog .ui-dialog-content {
position: relative;
border: 0;
padding: .5em 1em;
background: none;
overflow: auto;
}
.ui-dialog .ui-dialog-buttonpane {
text-align: left;
border-width: 1px 0 0 0;
background-image: none;
margin-top: .5em;
padding: .3em 1em .5em .4em;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
float: right;
}
.ui-dialog .ui-dialog-buttonpane button {
margin: .5em .4em .5em 0;
cursor: pointer;
}
.ui-dialog .ui-resizable-n {
height: 2px;
top: 0;
}
.ui-dialog .ui-resizable-e {
width: 2px;
right: 0;
}
.ui-dialog .ui-resizable-s {
height: 2px;
bottom: 0;
}
.ui-dialog .ui-resizable-w {
width: 2px;
left: 0;
}
.ui-dialog .ui-resizable-se,
.ui-dialog .ui-resizable-sw,
.ui-dialog .ui-resizable-ne,
.ui-dialog .ui-resizable-nw {
width: 7px;
height: 7px;
}
.ui-dialog .ui-resizable-se {
right: 0;
bottom: 0;
}
.ui-dialog .ui-resizable-sw {
left: 0;
bottom: 0;
}
.ui-dialog .ui-resizable-ne {
right: 0;
top: 0;
}
.ui-dialog .ui-resizable-nw {
left: 0;
top: 0;
}
.ui-draggable .ui-dialog-titlebar {
cursor: move;
}
.ui-draggable-handle {
-ms-touch-action: none;
touch-action: none;
}
.ui-resizable {
position: relative;
}
.ui-resizable-handle {
position: absolute;
font-size: 0.1px;
display: block;
-ms-touch-action: none;
touch-action: none;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
display: none;
}
.ui-resizable-n {
cursor: n-resize;
height: 7px;
width: 100%;
top: -5px;
left: 0;
}
.ui-resizable-s {
cursor: s-resize;
height: 7px;
width: 100%;
bottom: -5px;
left: 0;
}
.ui-resizable-e {
cursor: e-resize;
width: 7px;
right: -5px;
top: 0;
height: 100%;
}
.ui-resizable-w {
cursor: w-resize;
width: 7px;
left: -5px;
top: 0;
height: 100%;
}
.ui-resizable-se {
cursor: se-resize;
width: 12px;
height: 12px;
right: 1px;
bottom: 1px;
}
.ui-resizable-sw {
cursor: sw-resize;
width: 9px;
height: 9px;
left: -5px;
bottom: -5px;
}
.ui-resizable-nw {
cursor: nw-resize;
width: 9px;
height: 9px;
left: -5px;
top: -5px;
}
.ui-resizable-ne {
cursor: ne-resize;
width: 9px;
height: 9px;
right: -5px;
top: -5px;
}
.ui-progressbar {
height: 2em;
text-align: left;
overflow: hidden;
}
.ui-progressbar .ui-progressbar-value {
margin: -1px;
height: 100%;
}
.ui-progressbar .ui-progressbar-overlay {
background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
height: 100%;
filter: alpha(opacity=25); /* support: IE8 */
opacity: 0.25;
}
.ui-progressbar-indeterminate .ui-progressbar-value {
background-image: none;
}
.ui-selectable {
-ms-touch-action: none;
touch-action: none;
}
.ui-selectable-helper {
position: absolute;
z-index: 100;
border: 1px dotted black;
}
.ui-selectmenu-menu {
padding: 0;
margin: 0;
position: absolute;
top: 0;
left: 0;
display: none;
}
.ui-selectmenu-menu .ui-menu {
overflow: auto;
overflow-x: hidden;
padding-bottom: 1px;
}
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
font-size: 1em;
font-weight: bold;
line-height: 1.5;
padding: 2px 0.4em;
margin: 0.5em 0 0 0;
height: auto;
border: 0;
}
.ui-selectmenu-open {
display: block;
}
.ui-selectmenu-text {
display: block;
margin-right: 20px;
overflow: hidden;
text-overflow: ellipsis;
}
.ui-selectmenu-button.ui-button {
text-align: left;
white-space: nowrap;
width: 14em;
}
.ui-selectmenu-icon.ui-icon {
float: right;
margin-top: 0;
}
.ui-slider {
position: relative;
text-align: left;
}
.ui-slider .ui-slider-handle {
position: absolute;
z-index: 2;
width: 1.2em;
height: 1.2em;
cursor: default;
-ms-touch-action: none;
touch-action: none;
}
.ui-slider .ui-slider-range {
position: absolute;
z-index: 1;
font-size: .7em;
display: block;
border: 0;
background-position: 0 0;
}
/* support: IE8 - See #6727 */
.ui-slider.ui-state-disabled .ui-slider-handle,
.ui-slider.ui-state-disabled .ui-slider-range {
filter: inherit;
}
.ui-slider-horizontal {
height: .8em;
}
.ui-slider-horizontal .ui-slider-handle {
top: -.3em;
margin-left: -.6em;
}
.ui-slider-horizontal .ui-slider-range {
top: 0;
height: 100%;
}
.ui-slider-horizontal .ui-slider-range-min {
left: 0;
}
.ui-slider-horizontal .ui-slider-range-max {
right: 0;
}
.ui-slider-vertical {
width: .8em;
height: 100px;
}
.ui-slider-vertical .ui-slider-handle {
left: -.3em;
margin-left: 0;
margin-bottom: -.6em;
}
.ui-slider-vertical .ui-slider-range {
left: 0;
width: 100%;
}
.ui-slider-vertical .ui-slider-range-min {
bottom: 0;
}
.ui-slider-vertical .ui-slider-range-max {
top: 0;
}
.ui-sortable-handle {
-ms-touch-action: none;
touch-action: none;
}
.ui-spinner {
position: relative;
display: inline-block;
overflow: hidden;
padding: 0;
vertical-align: middle;
}
.ui-spinner-input {
border: none;
background: none;
color: inherit;
padding: .222em 0;
margin: .2em 0;
vertical-align: middle;
margin-left: .4em;
margin-right: 2em;
}
.ui-spinner-button {
width: 1.6em;
height: 50%;
font-size: .5em;
padding: 0;
margin: 0;
text-align: center;
position: absolute;
cursor: default;
display: block;
overflow: hidden;
right: 0;
}
/* more specificity required here to override default borders */
.ui-spinner a.ui-spinner-button {
border-top-style: none;
border-bottom-style: none;
border-right-style: none;
}
.ui-spinner-up {
top: 0;
}
.ui-spinner-down {
bottom: 0;
}
.ui-tabs {
position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
padding: .2em;
}
.ui-tabs .ui-tabs-nav {
margin: 0;
padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li {
list-style: none;
float: left;
position: relative;
top: 0;
margin: 1px .2em 0 0;
border-bottom-width: 0;
padding: 0;
white-space: nowrap;
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
float: left;
padding: .5em 1em;
text-decoration: none;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
margin-bottom: -1px;
padding-bottom: 1px;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
cursor: text;
}
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
cursor: pointer;
}
.ui-tabs .ui-tabs-panel {
display: block;
border-width: 0;
padding: 1em 1.4em;
background: none;
}
.ui-tooltip {
padding: 8px;
position: absolute;
z-index: 9999;
max-width: 300px;
}
body .ui-tooltip {
border-width: 2px;
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,440 @@
/*!
* jQuery UI CSS Framework 1.12.0-rc.2
* http://jqueryui.com
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license.
* http://jquery.org/license
*
* http://api.jqueryui.com/category/theming/
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
*/
/* Component containers
----------------------------------*/
.ui-widget {
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
}
.ui-widget .ui-widget {
font-size: 1em;
}
.ui-widget input,
.ui-widget select,
.ui-widget textarea,
.ui-widget button {
font-family: Arial,Helvetica,sans-serif;
font-size: 1em;
}
.ui-widget.ui-widget-content {
border: 1px solid #c5c5c5;
}
.ui-widget-content {
border: 1px solid #dddddd;
background: #ffffff;
color: #333333;
}
.ui-widget-content a {
color: #333333;
}
.ui-widget-header {
border: 1px solid #dddddd;
background: #e9e9e9;
color: #333333;
font-weight: bold;
}
.ui-widget-header a {
color: #333333;
}
/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default,
.ui-button,
/* We use html here because we need a greater specificity to make sure disabled
works properly when clicked or hovered */
html .ui-button.ui-state-disabled:hover,
html .ui-button.ui-state-disabled:active {
border: 1px solid #c5c5c5;
background: #f6f6f6;
font-weight: normal;
color: #454545;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited,
a.ui-button,
a:link.ui-button,
a:visited.ui-button,
.ui-button {
color: #454545;
text-decoration: none;
}
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus,
.ui-button:hover,
.ui-button:focus {
border: 1px solid #cccccc;
background: #ededed;
font-weight: normal;
color: #2b2b2b;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited,
.ui-state-focus a,
.ui-state-focus a:hover,
.ui-state-focus a:link,
.ui-state-focus a:visited,
a.ui-button:hover,
a.ui-button:focus {
color: #2b2b2b;
text-decoration: none;
}
.ui-visual-focus {
box-shadow: 0 0 3px 1px rgb(94, 158, 214);
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
border: 1px solid #003eff;
background: #007fff;
font-weight: normal;
color: #ffffff;
}
.ui-icon-background,
.ui-state-active .ui-icon-background {
border: #003eff;
background-color: #ffffff;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
color: #ffffff;
text-decoration: none;
}
/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
border: 1px solid #dad55e;
background: #fffa90;
color: #777620;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
color: #777620;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
border: 1px solid #f1a899;
background: #fddfdf;
color: #5f3f3f;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
color: #5f3f3f;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
color: #5f3f3f;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
opacity: .7;
filter:Alpha(Opacity=70); /* support: IE8 */
font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
opacity: .35;
filter:Alpha(Opacity=35); /* support: IE8 */
background-image: none;
}
.ui-state-disabled .ui-icon {
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
}
/* Icons
----------------------------------*/
/* states and images */
.ui-icon {
width: 16px;
height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-widget-header .ui-icon {
background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-button .ui-icon {
background-image: url("images/ui-icons_777777_256x240.png");
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon,
.ui-button:hover .ui-icon,
.ui-button:focus .ui-icon,
.ui-state-default .ui-icon {
background-image: url("images/ui-icons_555555_256x240.png");
}
.ui-state-active .ui-icon,
.ui-button:active .ui-icon {
background-image: url("images/ui-icons_ffffff_256x240.png");
}
.ui-state-highlight .ui-icon,
.ui-button .ui-state-highlight.ui-icon {
background-image: url("images/ui-icons_777620_256x240.png");
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
background-image: url("images/ui-icons_cc0000_256x240.png");
}
/* positioning */
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
.ui-icon-caret-1-se { background-position: -48px 0; }
.ui-icon-caret-1-s { background-position: -65px 0; }
.ui-icon-caret-1-sw { background-position: -80px 0; }
.ui-icon-caret-1-w { background-position: -96px 0; }
.ui-icon-caret-1-nw { background-position: -112px 0; }
.ui-icon-caret-2-n-s { background-position: -128px 0; }
.ui-icon-caret-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -65px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -65px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-all,
.ui-corner-top,
.ui-corner-left,
.ui-corner-tl {
border-top-left-radius: 3px;
}
.ui-corner-all,
.ui-corner-top,
.ui-corner-right,
.ui-corner-tr {
border-top-right-radius: 3px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-left,
.ui-corner-bl {
border-bottom-left-radius: 3px;
}
.ui-corner-all,
.ui-corner-bottom,
.ui-corner-right,
.ui-corner-br {
border-bottom-right-radius: 3px;
}
/* Overlays */
.ui-widget-overlay {
background: #aaaaaa;
opacity: .003;
filter: Alpha(Opacity=.3); /* support: IE8 */
}
.ui-widget-shadow {
-webkit-box-shadow: 0px 0px 5px #666666;
box-shadow: 0px 0px 5px #666666;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,126 @@
/*
* jsGrid v1.5.3 (http://js-grid.com)
* (c) 2016 Artem Tabalin
* Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)
*/
.jsgrid {
position: relative;
overflow: hidden;
font-size: 1em;
}
.jsgrid, .jsgrid *, .jsgrid *:before, .jsgrid *:after {
box-sizing: border-box;
}
.jsgrid input,
.jsgrid textarea,
.jsgrid select {
font-size: 1em;
}
.jsgrid-grid-header {
overflow-x: hidden;
overflow-y: scroll;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
.jsgrid-grid-body {
overflow-x: auto;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
.jsgrid-table {
width: 100%;
table-layout: fixed;
border-collapse: collapse;
border-spacing: 0;
}
.jsgrid-cell {
padding: 0.5em 0.5em;
}
.jsgrid-сell,
.jsgrid-header-cell {
box-sizing: border-box;
}
.jsgrid-align-left {
text-align: left;
}
.jsgrid-align-center,
.jsgrid-align-center input,
.jsgrid-align-center textarea,
.jsgrid-align-center select {
text-align: center;
}
.jsgrid-align-right,
.jsgrid-align-right input,
.jsgrid-align-right textarea,
.jsgrid-align-right select {
text-align: right;
}
.jsgrid-header-cell {
padding: .5em .5em;
}
.jsgrid-filter-row input,
.jsgrid-filter-row textarea,
.jsgrid-filter-row select,
.jsgrid-edit-row input,
.jsgrid-edit-row textarea,
.jsgrid-edit-row select,
.jsgrid-insert-row input,
.jsgrid-insert-row textarea,
.jsgrid-insert-row select {
width: 100%;
padding: .3em .5em;
}
.jsgrid-filter-row input[type='checkbox'],
.jsgrid-edit-row input[type='checkbox'],
.jsgrid-insert-row input[type='checkbox'] {
width: auto;
}
.jsgrid-selected-row .jsgrid-cell {
cursor: pointer;
}
.jsgrid-nodata-row .jsgrid-cell {
padding: .5em 0;
text-align: center;
}
.jsgrid-header-sort {
cursor: pointer;
}
.jsgrid-pager {
padding: .5em 0;
}
.jsgrid-pager-nav-button {
padding: .2em .6em;
}
.jsgrid-pager-nav-inactive-button {
display: none;
pointer-events: none;
}
.jsgrid-pager-page {
padding: .2em .6em;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
/*
* jsGrid v1.5.3 (http://js-grid.com)
* (c) 2016 Artem Tabalin
* Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)
*/
.jsgrid{position:relative;overflow:hidden;font-size:1em}.jsgrid,.jsgrid *,.jsgrid :after,.jsgrid :before{box-sizing:border-box}.jsgrid input,.jsgrid select,.jsgrid textarea{font-size:1em}.jsgrid-grid-header{overflow-x:hidden;overflow-y:scroll;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.jsgrid-grid-body{overflow-x:auto;overflow-y:scroll;-webkit-overflow-scrolling:touch}.jsgrid-table{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0}.jsgrid-cell{padding:.5em}.jsgrid-header-cell,.jsgrid-сell{box-sizing:border-box}.jsgrid-align-left{text-align:left}.jsgrid-align-center,.jsgrid-align-center input,.jsgrid-align-center select,.jsgrid-align-center textarea{text-align:center}.jsgrid-align-right,.jsgrid-align-right input,.jsgrid-align-right select,.jsgrid-align-right textarea{text-align:right}.jsgrid-header-cell{padding:.5em}.jsgrid-edit-row input,.jsgrid-edit-row select,.jsgrid-edit-row textarea,.jsgrid-filter-row input,.jsgrid-filter-row select,.jsgrid-filter-row textarea,.jsgrid-insert-row input,.jsgrid-insert-row select,.jsgrid-insert-row textarea{width:100%;padding:.3em .5em}.jsgrid-edit-row input[type=checkbox],.jsgrid-filter-row input[type=checkbox],.jsgrid-insert-row input[type=checkbox]{width:auto}.jsgrid-selected-row .jsgrid-cell{cursor:pointer}.jsgrid-nodata-row .jsgrid-cell{padding:.5em 0;text-align:center}.jsgrid-header-sort{cursor:pointer}.jsgrid-pager{padding:.5em 0}.jsgrid-pager-nav-button{padding:.2em .6em}.jsgrid-pager-nav-inactive-button{display:none;pointer-events:none}.jsgrid-pager-page{padding:.2em .6em}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,128 @@
/*
* jsGrid v1.5.3 (http://js-grid.com)
* (c) 2016 Artem Tabalin
* Licensed under MIT (https://github.com/tabalinas/jsgrid/blob/master/LICENSE)
*/
.jsgrid {
position: relative;
overflow: hidden;
font-size: 1em;
}
.jsgrid, .jsgrid *, .jsgrid *:before, .jsgrid *:after {
box-sizing: border-box;
}
.jsgrid input,
.jsgrid textarea,
.jsgrid select {
font-size: 1em;
}
.jsgrid-grid-header {
overflow-x: hidden;
overflow-y: scroll;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
.jsgrid-grid-body {
overflow-x: auto;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
.jsgrid-table {
width: 100%;
table-layout: fixed;
border-collapse: collapse;
border-spacing: 0;
}
.jsgrid-cell {
padding: 0.5em 0.5em;
}
.jsgrid-сell,
.jsgrid-header-cell {
box-sizing: border-box;
}
.jsgrid-align-left {
text-align: left;
}
.jsgrid-align-center,
.jsgrid-align-center input,
.jsgrid-align-center textarea,
.jsgrid-align-center select {
text-align: center;
}
.jsgrid-align-right,
.jsgrid-align-right input,
.jsgrid-align-right textarea,
.jsgrid-align-right select {
text-align: right;
}
.jsgrid-header-cell {
padding: .5em .5em;
}
.jsgrid-filter-row input,
.jsgrid-filter-row textarea,
.jsgrid-filter-row select,
.jsgrid-edit-row input,
.jsgrid-edit-row textarea,
.jsgrid-edit-row select,
.jsgrid-insert-row input,
.jsgrid-insert-row textarea,
.jsgrid-insert-row select {
width: 100%;
padding: .3em .5em;
}
.jsgrid-filter-row input[type='checkbox'],
.jsgrid-edit-row input[type='checkbox'],
.jsgrid-insert-row input[type='checkbox'] {
width: auto;
}
.jsgrid-selected-row .jsgrid-cell {
cursor: pointer;
}
.jsgrid-nodata-row .jsgrid-cell {
padding: .5em 0;
text-align: center;
}
.jsgrid-header-sort {
cursor: pointer;
}
.jsgrid-pager {
padding: .5em 0;
padding-top: 20px;
text-align: center;
}
.jsgrid-pager-nav-button {
padding: .2em .6em;
}
.jsgrid-pager-nav-inactive-button {
/* display: none; [NLIB:주석처리] */
pointer-events: none;
}
.jsgrid-pager-page {
padding: .2em .6em;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
/*
*
* NLIB 공통 JavaScript
*
*
*/

View File

@ -0,0 +1,34 @@
<html>
<!--
http://localhost:8080/nlib/fileupload/js/dropzone.css
-->
<meta charset="utf-8">
<link rel="stylesheet" href="/nlib/js/fileupload/dropzone.css" />
<link rel="stylesheet" href="/nlib/js/fileupload/style.css" />
<script src="/nlib/js/fileupload/dropzone.js"></script>
<!--
<link rel="stylesheet" href="https://www.dropzonejs.com/css/dropzone.css?v=1595510599" />
<link rel="stylesheet" href="https://www.dropzonejs.com/css/style.css?v=1595510599" />
<script src="https://www.dropzonejs.com/js/dropzone.js?v=1595510599"></script>
-->
<body>
<div id="dropzone">
<form action="/nlib/fileupload/uploadFile.do"
class="dropzone needsclick" id="myDropzone">
<div class="dz-message needsclick">
<button type="button" class="dz-button">Drop files here or click to select files.</button><br />
<span class="note needsclick">이곳에 파일을 끌어다 놓거나, 클릭하여 올릴 파일을 선택하세요.</span>
</div>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,41 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Grid</title>
<link type="text/css" rel="stylesheet" href="jsgrid.min.css" />
<link type="text/css" rel="stylesheet" href="jsgrid-theme.min.css" />
<script type="text/javascript" src="jsgrid.min.js"></script>
</head>
<body>
<table id="table1"></table>
<script type="text/javascript">
function makeTable(id, array){
$("#"+id).jqGrid({
datatype: "local",
height: 250,
width : 630,
colNames:['a','b', 'RPM', 'c','d'],
colModel:[
{name:'fOcurDtmc', align:'right'},
{name:'spd', align:'right'},
{name:'rpm', align:'right'},
{name:'brkYn', align:'right'},
{name:'status', align:'right'}
],
caption: "DT"
});
for(var I in array){
$("#"+id).jqGrid('addRowData',i+1,array[i]);
}
}
makeTable('table1', dataArray);
</script>
</body>
</html>

View File

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Grid</title>
<link type="text/css" rel="stylesheet" href="/nlib/js/jsgrid/jsgrid.min.css" />
<link type="text/css" rel="stylesheet" href="/nlib/js/jsgrid/jsgrid-theme.min.css" />
<script src="/nlib/js/jquery/jquery.min.js"></script>
<script src="/nlib/js/jsgrid/jsgrid.min.js"></script>
</head>
<body>
<div id="jsGrid" name="jsGrid" style="width:400px; height:300px;"></div>
<script>
var clients = [
{ "이름": "Otto Clay", "Age": 25, "Country": 1, "Address": "Ap #897-1459 Quam Avenue", "Married": false },
{ "Name": "Connor Johnston", "Age": 45, "Country": 2, "Address": "Ap #370-4647 Dis Av.", "Married": true },
{ "Name": "Lacey Hess", "Age": 29, "Country": 3, "Address": "Ap #365-8835 Integer St.", "Married": false },
{ "Name": "Timothy Henson", "Age": 56, "Country": 1, "Address": "911-5143 Luctus Ave", "Married": true },
{ "Name": "Ramona Benton", "Age": 32, "Country": 3, "Address": "Ap #614-689 Vehicula Street", "Married": false }
];
var countries = [
{ Name: "", Id: 0 },
{ Name: "United States", Id: 1 },
{ Name: "Canada", Id: 2 },
{ Name: "United Kingdom", Id: 3 }
];
$("#jsGrid").jsGrid({
width: "100%",
height: "400px",
inserting: true,
editing: true,
sorting: true,
paging: true,
data: clients,
fields: [
{ name: "이름", type: "text", width: 150, validate: "required" },
{ name: "Age", type: "number", width: 50 },
{ name: "Address", type: "text", width: 200 },
{ name: "Country", type: "select", items: countries, valueField: "Id", textField: "Name" },
{ name: "Married", type: "checkbox", title: "Is Married", sorting: false },
{ type: "control" }
]
});
</script>
</body>
</html>

View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Grid</title>
<link rel="stylesheet" type="text/css" href="/nlib/js/jqgrid/ui.jqgrid.css"/>
<script type="text/javascript" src="/nlib/js/jqgrid/jquery.jqGrid.min.js'/>"></script>
</head>
<body>
<table id="table1"></table>
<script type="text/javascript">
function makeTable(id, array){
$("#"+id).jqGrid({
datatype: "local",
height: 250,
width : 630,
colNames:['일시','속도', 'RPM', '브레이크','상태'],
colModel:[
{name:'fOcurDtmc', align:'right'},
{name:'spd', align:'right'},
{name:'rpm', align:'right'},
{name:'brkYn', align:'right'},
{name:'status', align:'right'}
],
caption: "DTG 데이터"
});
for(var I in array){
$("#"+id).jqGrid('addRowData',i+1,array[i]);
}
}
makeTable('table1', dataArray);
</script>
</body>
</html>

View File

@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Root level="DEBUG">
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>