소스 동기화

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"?> <?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" <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"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>nlib</groupId> <groupId>nlib</groupId>
<artifactId>nlib</artifactId> <artifactId>nlib</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<version>1.0.0</version> <version>1.0.0</version>
<name>nlib</name> <name>nlib</name>
<url>http://www.egovframe.go.kr</url> <url>http://www.egovframe.go.kr</url>
<licenses> <licenses>
<license> <license>
<name>The Apache Software License, Version 2.0</name> <name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license> </license>
</licenses> </licenses>
<properties> <properties>
<spring.maven.artifact.version>4.3.16.RELEASE</spring.maven.artifact.version> <spring.maven.artifact.version>4.3.16.RELEASE</spring.maven.artifact.version>
<egovframework.rte.version>3.8.0</egovframework.rte.version> <egovframework.rte.version>3.8.0</egovframework.rte.version>
<spring-security.version>4.2.5.RELEASE</spring-security.version> <spring-security.version>4.2.5.RELEASE</spring-security.version>
</properties> </properties>
<repositories> <repositories>
<repository> <repository>
<id>mvn2</id> <id>mvn2</id>
<url>http://repo1.maven.org/maven2/</url> <url>http://repo1.maven.org/maven2/</url>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
</releases> </releases>
<snapshots> <snapshots>
<enabled>true</enabled> <enabled>true</enabled>
</snapshots> </snapshots>
</repository> </repository>
<repository> <repository>
<id>egovframe</id> <id>egovframe</id>
<url>http://www.egovframe.go.kr/maven/</url> <url>http://www.egovframe.go.kr/maven/</url>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
</releases> </releases>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>
</repository> </repository>
<repository> <repository>
<id>egovframe2</id> <id>egovframe2</id>
<url>http://maven.egovframe.kr:8080/maven/</url> <url>http://maven.egovframe.kr:8080/maven/</url>
<releases> <releases>
<enabled>true</enabled> <enabled>true</enabled>
</releases> </releases>
<snapshots> <snapshots>
<enabled>false</enabled> <enabled>false</enabled>
</snapshots> </snapshots>
</repository> </repository>
</repositories> </repositories>
<dependencies> <dependencies>
<!-- 표준프레임워크 실행환경 --> <!-- 표준프레임워크 실행환경 -->
<dependency> <dependency>
<groupId>egovframework.rte</groupId> <groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.ptl.mvc</artifactId> <artifactId>egovframework.rte.ptl.mvc</artifactId>
<version>${egovframework.rte.version}</version> <version>${egovframework.rte.version}</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>commons-logging</artifactId> <artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId> <groupId>commons-logging</groupId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>egovframework.rte</groupId> <groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.psl.dataaccess</artifactId> <artifactId>egovframework.rte.psl.dataaccess</artifactId>
<version>${egovframework.rte.version}</version> <version>${egovframework.rte.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>egovframework.rte</groupId> <groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.idgnr</artifactId> <artifactId>egovframework.rte.fdl.idgnr</artifactId>
<version>${egovframework.rte.version}</version> <version>${egovframework.rte.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>egovframework.rte</groupId> <groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.property</artifactId> <artifactId>egovframework.rte.fdl.property</artifactId>
<version>${egovframework.rte.version}</version> <version>${egovframework.rte.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId> <artifactId>servlet-api</artifactId>
<scope>provided</scope> <scope>provided</scope>
<version>2.5</version> <version>2.5</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId> <artifactId>jstl</artifactId>
<version>1.2</version> <version>1.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>taglibs</groupId> <groupId>taglibs</groupId>
<artifactId>standard</artifactId> <artifactId>standard</artifactId>
<version>1.1.2</version> <version>1.1.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.antlr</groupId> <groupId>org.antlr</groupId>
<artifactId>antlr</artifactId> <artifactId>antlr</artifactId>
<version>3.5</version> <version>3.5</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>
<version>1.9</version> <version>1.9</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>egovframework.rte</groupId> <groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.crypto</artifactId> <artifactId>egovframework.rte.fdl.crypto</artifactId>
<version>${egovframework.rte.version}</version> <version>${egovframework.rte.version}</version>
</dependency> </dependency>
<!-- fileupload --> <!-- fileupload -->
<dependency> <dependency>
<groupId>commons-fileupload</groupId> <groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId> <artifactId>commons-fileupload</artifactId>
<version>1.3.1</version> <version>1.3.1</version>
<!-- <exclusions> <!-- <exclusions>
<exclusion> <exclusion>
<artifactId>commons-io</artifactId> <artifactId>commons-io</artifactId>
<groupId>commons-io</groupId> <groupId>commons-io</groupId>
</exclusion> </exclusion>
</exclusions> --> </exclusions> -->
</dependency> </dependency>
<!-- Spring Security --> <!-- Spring Security -->
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId> <artifactId>spring-security-web</artifactId>
<version>${spring-security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId> <artifactId>spring-security-core</artifactId>
<version>${spring-security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId> <artifactId>spring-security-config</artifactId>
<version>${spring-security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId> <artifactId>spring-security-taglibs</artifactId>
<version>${spring-security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<!-- 요소기술 달력을 위한 라이브러리 --> <!-- 요소기술 달력을 위한 라이브러리 -->
<dependency> <dependency>
<groupId>com.ibm.icu</groupId> <groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId> <artifactId>icu4j</artifactId>
<version>53.1</version> <version>53.1</version>
</dependency> </dependency>
<!-- XML-Map 변환 기능을 위한 추가 (DIGITALSHIP KNKIM 2021.06.15)--> <!-- XML-Map 변환 기능을 위한 추가 (DIGITALSHIP KNKIM 2021.06.15)-->
<dependency> <dependency>
<groupId>com.thoughtworks.xstream</groupId> <groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId> <artifactId>xstream</artifactId>
<version>1.4.4</version> <version>1.4.4</version>
</dependency> </dependency>
<!-- XML/자바객체 변환 (DIGITALSHIP KNKIM 2021.06.21)--> <!-- XML/자바객체 변환 (DIGITALSHIP KNKIM 2021.06.21)-->
<dependency> <dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId> <groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId> <artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version> <version>2.9.0</version>
</dependency> </dependency>
<!-- 바코드 ZXing (DIGITALSHIP KNKIM 2021.06.25)--> <!-- 바코드 ZXing (DIGITALSHIP KNKIM 2021.06.25)-->
<dependency> <dependency>
<groupId>com.google.zxing</groupId> <groupId>com.google.zxing</groupId>
<artifactId>core</artifactId> <artifactId>core</artifactId>
<version>3.3.0</version> <version>3.3.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.zxing</groupId> <groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId> <artifactId>javase</artifactId>
<version>3.3.0</version> <version>3.3.0</version>
</dependency> </dependency>
<!-- Tiles (DIGITALSHIP KNKIM 2021.07.06)--> <!-- Tiles (DIGITALSHIP KNKIM 2021.07.06)-->
<dependency> <dependency>
<groupId>org.apache.tiles</groupId> <groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId> <artifactId>tiles-extras</artifactId>
<version>3.0.8</version> <version>3.0.8</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.tiles</groupId> <groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId> <artifactId>tiles-servlet</artifactId>
<version>3.0.8</version> <version>3.0.8</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.tiles</groupId> <groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId> <artifactId>tiles-jsp</artifactId>
<version>3.0.8</version> <version>3.0.8</version>
</dependency> </dependency>
<!-- AJAX JSON (DIGITALSHIP KNKIM 2021.07.15)--> <!-- AJAX JSON (DIGITALSHIP KNKIM 2021.07.15)-->
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId> <artifactId>jackson-core</artifactId>
<version>2.11.4</version> <version>2.11.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId> <artifactId>jackson-annotations</artifactId>
<version>2.11.4</version> <version>2.11.4</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>2.11.4</version> <version>2.11.4</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<defaultGoal>install</defaultGoal> <defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory> <directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName> <finalName>${artifactId}-${version}</finalName>
<pluginManagement> <pluginManagement>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.tomcat.maven</groupId> <groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId> <artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version> <version>2.2</version>
<configuration> <configuration>
<port>80</port> <port>80</port>
<path>/</path> <path>/</path>
<systemProperties> <systemProperties>
<JAVA_OPTS>-Xms256m -Xmx768m -XX:MaxPermSize=256m</JAVA_OPTS> <JAVA_OPTS>-Xms256m -Xmx768m -XX:MaxPermSize=256m</JAVA_OPTS>
</systemProperties> </systemProperties>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<source>1.8</source> <source>1.8</source>
<target>1.8</target> <target>1.8</target>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId> <artifactId>hibernate3-maven-plugin</artifactId>
<version>2.1</version> <version>2.1</version>
<configuration> <configuration>
<components> <components>
<component> <component>
<name>hbm2ddl</name> <name>hbm2ddl</name>
<implementation>annotationconfiguration</implementation> <implementation>annotationconfiguration</implementation>
</component> </component>
</components> </components>
</configuration> </configuration>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.hsqldb</groupId> <groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId> <artifactId>hsqldb</artifactId>
<version>2.3.2</version> <version>2.3.2</version>
</dependency> </dependency>
</dependencies> </dependencies>
</plugin> </plugin>
<!-- EMMA --> <!-- EMMA -->
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId> <artifactId>emma-maven-plugin</artifactId>
<version>1.0-alpha-3</version> <version>1.0-alpha-3</version>
</plugin> </plugin>
<!-- PMD manven plugin --> <!-- PMD manven plugin -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId> <artifactId>maven-pmd-plugin</artifactId>
<version>3.1</version> <version>3.1</version>
</plugin> </plugin>
</plugins> </plugins>
</pluginManagement> </pluginManagement>
<plugins> <plugins>
<!-- EMMA --> <!-- EMMA -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<configuration> <configuration>
<skipTests>true</skipTests> <skipTests>true</skipTests>
<forkMode>once</forkMode> <forkMode>once</forkMode>
<reportFormat>xml</reportFormat> <reportFormat>xml</reportFormat>
<excludes> <excludes>
<exclude>**/Abstract*.java</exclude> <exclude>**/Abstract*.java</exclude>
<exclude>**/*Suite.java</exclude> <exclude>**/*Suite.java</exclude>
</excludes> </excludes>
<includes> <includes>
<include>**/*Test.java</include> <include>**/*Test.java</include>
</includes> </includes>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId> <artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited> <inherited>true</inherited>
</plugin> </plugin>
<!-- JavaDoc --> <!-- JavaDoc -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version> <version>2.9.1</version>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<reporting> <reporting>
<outputDirectory>${basedir}/target/site</outputDirectory> <outputDirectory>${basedir}/target/site</outputDirectory>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId> <artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.7</version> <version>2.7</version>
<reportSets> <reportSets>
<reportSet> <reportSet>
<id>sunlink</id> <id>sunlink</id>
<reports> <reports>
<report>javadoc</report> <report>javadoc</report>
</reports> </reports>
<inherited>true</inherited> <inherited>true</inherited>
<configuration> <configuration>
<links> <links>
<link>http://docs.oracle.com/javase/6/docs/api/</link> <link>http://docs.oracle.com/javase/6/docs/api/</link>
</links> </links>
</configuration> </configuration>
</reportSet> </reportSet>
</reportSets> </reportSets>
</plugin> </plugin>
<!-- JUnit Test Results & EMMA Coverage Reporting --> <!-- JUnit Test Results & EMMA Coverage Reporting -->
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>emma-maven-plugin</artifactId> <artifactId>emma-maven-plugin</artifactId>
<inherited>true</inherited> <inherited>true</inherited>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>surefire-report-maven-plugin</artifactId> <artifactId>surefire-report-maven-plugin</artifactId>
<inherited>true</inherited> <inherited>true</inherited>
<reportSets> <reportSets>
<reportSet> <reportSet>
<reports> <reports>
<report>report-only</report> <report>report-only</report>
</reports> </reports>
</reportSet> </reportSet>
</reportSets> </reportSets>
</plugin> </plugin>
<!-- Generating JavaDoc Report --> <!-- Generating JavaDoc Report -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<configuration> <configuration>
<minmemory>128m</minmemory> <minmemory>128m</minmemory>
<maxmemory>512m</maxmemory> <maxmemory>512m</maxmemory>
<encoding>${encoding}</encoding> <encoding>${encoding}</encoding>
<docencoding>${encoding}</docencoding> <docencoding>${encoding}</docencoding>
<charset>${encoding}</charset> <charset>${encoding}</charset>
</configuration> </configuration>
</plugin> </plugin>
<!-- Generating Java Source in HTML --> <!-- Generating Java Source in HTML -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId> <artifactId>maven-jxr-plugin</artifactId>
<configuration> <configuration>
<inputEncoding>${encoding}</inputEncoding> <inputEncoding>${encoding}</inputEncoding>
<outputEncoding>${encoding}</outputEncoding> <outputEncoding>${encoding}</outputEncoding>
<linkJavadoc>true</linkJavadoc> <linkJavadoc>true</linkJavadoc>
<javadocDir>apidocs</javadocDir> <javadocDir>apidocs</javadocDir>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</reporting> </reporting>
</project> </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; package nlib.bbs.service;
import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO; import nlib.restful.service.DataApiResVO;
public interface BoardService /**
{ * <pre>
public DataApiResVO listNotices(DataApiReqVO reqVO); * @Class Name : BoardService.java
*
public DataApiResVO selectNotice(DataApiReqVO reqVO); * @Description : 게시물 관리 클래스
*
public DataApiResVO listFAQs(DataApiReqVO reqVO); *
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
public DataApiResVO listQnAs(DataApiReqVO reqVO); *
* </pre>
public DataApiResVO selectQnA(DataApiReqVO reqVO); *
* @ ------------ -------- ---------------------------
public DataApiResVO insertQnA(DataApiReqVO reqVO); * @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
public DataApiResVO verifyWriter(DataApiReqVO reqVO); * @ 2021. 7. 19. KNKIM 최초 생성
*
public DataApiResVO updateQnA(DataApiReqVO reqVO); *
* @author 이씨플라자 * DIGITALSHIP KNKIM
public DataApiResVO deleteQnA(DataApiReqVO reqVO); * @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; package nlib.bbs.service.impl;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import nlib.cmm.web.MainController; import nlib.cmm.web.MainController;
import nlib.restful.DataApi; import nlib.restful.DataApi;
import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO; import nlib.restful.service.DataApiResVO;
@Repository("boardDAO") @Repository("boardDAO")
public class BoardDAO extends DataApi public class BoardDAO extends DataApi
{ {
private static final Logger log = LoggerFactory.getLogger(BoardDAO.class); private static final Logger log = LoggerFactory.getLogger(BoardDAO.class);
public DataApiResVO listNotices(DataApiReqVO reqVO) { /**
return null; * 자원의 URI
} */
public static final String RESOURCE_URI = "/uac/service/board/qna";
public DataApiResVO selectNotice(DataApiReqVO reqVO) {
return null; public DataApiResVO listNotices(DataApiReqVO reqVO) {
} return null;
}
public DataApiResVO listFAQs(DataApiReqVO reqVO) {
return null; public DataApiResVO selectNotice(DataApiReqVO reqVO) {
} return null;
}
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
return null; public DataApiResVO listFAQs(DataApiReqVO reqVO) {
} return null;
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null; /**
} * 묻고답하기 목록 조회한다.
*
public DataApiResVO verifyWriter(DataApiReqVO reqVO) { * @param reqVO
return null; * @return
} */
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
public DataApiResVO updateQnA(DataApiReqVO reqVO) { reqVO.setReqUrl(RESOURCE_URI + "/list");
return null; return get(reqVO);
} }
public DataApiResVO deleteQnA(DataApiReqVO reqVO) { public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null; return null;
} }
public DataApiResVO insertQnA(DataApiReqVO reqVO) { public DataApiResVO verifyWriter(DataApiReqVO reqVO) {
return null; 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; package nlib.bbs.service.impl;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import nlib.bbs.service.BoardService; import nlib.bbs.service.BoardService;
import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO; import nlib.restful.service.DataApiResVO;
@Service("boardService") @Service("boardService")
public class BoardServiceImpl implements BoardService public class BoardServiceImpl implements BoardService
{ {
private static final Logger log = LoggerFactory.getLogger(BoardServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(BoardServiceImpl.class);
@Resource(name = "boardDAO") @Resource(name = "boardDAO")
private BoardDAO boardDAO; private BoardDAO boardDAO;
public DataApiResVO listNotices(DataApiReqVO reqVO) { public DataApiResVO listNotices(DataApiReqVO reqVO) {
return null; return null;
} }
public DataApiResVO selectNotice(DataApiReqVO reqVO) { public DataApiResVO selectNotice(DataApiReqVO reqVO) {
return null; return null;
} }
public DataApiResVO listFAQs(DataApiReqVO reqVO) { public DataApiResVO listFAQs(DataApiReqVO reqVO) {
return null; return null;
} }
public DataApiResVO listQnAs(DataApiReqVO reqVO) { /*
return null; * 묻고답하기 목록 조회한다.
} *
* (non-Javadoc)
public DataApiResVO selectQnA(DataApiReqVO reqVO) { * @see nlib.bbs.service.BoardService#listQnAs(nlib.restful.service.DataApiReqVO)
return null; */
} public DataApiResVO listQnAs(DataApiReqVO reqVO) {
return boardDAO.listQnAs(reqVO);
public DataApiResVO insertQnA(DataApiReqVO reqVO) { }
return null;
} public DataApiResVO selectQnA(DataApiReqVO reqVO) {
return null;
public DataApiResVO verifyWriter(DataApiReqVO reqVO) { }
return null;
} public DataApiResVO insertQnA(DataApiReqVO reqVO) {
return null;
public DataApiResVO updateQnA(DataApiReqVO reqVO) { }
return null;
} public DataApiResVO verifyWriter(DataApiReqVO reqVO) {
return null;
public DataApiResVO deleteQnA(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; package nlib.bbs.web;
import javax.annotation.Resource; import java.util.HashMap;
import javax.servlet.http.HttpServletRequest; import java.util.Map;
import org.slf4j.Logger; import javax.annotation.Resource;
import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nlib.bbs.service.BoardService; import org.springframework.beans.factory.annotation.Autowired;
import nlib.bbs.service.impl.BoardServiceImpl; import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
@Controller import org.springframework.security.core.Authentication;
public class BoardController import org.springframework.stereotype.Controller;
{ import org.springframework.ui.ModelMap;
private static final Logger log = LoggerFactory.getLogger(BoardController.class); import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@Resource(name = "boardService") import org.springframework.web.bind.annotation.RequestParam;
private BoardService boardService; import org.springframework.web.bind.annotation.ResponseBody;
import nlib.bbs.service.BoardService;
public ModelMap listNotices(HttpServletRequest req) { import nlib.cmm.NlibCommonController;
return null; import nlib.restful.service.DataApiReqVO;
} import nlib.restful.service.DataApiResVO;
public ModelMap selectNotice(HttpServletRequest req) { @Controller
return null; public class BoardController extends NlibCommonController
} {
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
public ModelMap listFAQs(HttpServletRequest req) {
return null; @Resource(name = "boardService")
} private BoardService boardService;
public ModelMap listQnAs(HttpServletRequest req) { @Autowired
return null; private AuthenticationManager authenticationManager;
}
/**
public ModelMap selectQnA(HttpServletRequest req) { * 공지사항 목록 조회한다.
return null; *
} * @param req
* @return
public ModelMap insertQnAForm(HttpServletRequest req) { */
return null; @SuppressWarnings("deprecation")
} @RequestMapping("/board/listNotices.do")
public String listNotices(HttpServletRequest req) {
public ModelMap insertQnA(HttpServletRequest req) {
return null; return "nlib/board/listNotices";
} }
public ModelMap verifyWriter(HttpServletRequest req) { /**
return null; * 공지사항 상세 내용 조회한다.
} * @param req
* @return
public ModelMap updateQnAForm(HttpServletRequest req) { */
return null; @RequestMapping("/board/selectNotice.do")
} public String selectNotice(HttpServletRequest req) {
return "nlib/board/selectNotice";
public ModelMap updateQnA(HttpServletRequest req) { }
return null;
} /**
* FAQ 목록 조회한다.
public ModelMap deleteQnA(HttpServletRequest req) { *
return null; * @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; package nlib.restful.service;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import nlib.cmm.util.MapEntryConverter; import nlib.cmm.util.MapEntryConverter;
import nlib.util.StringUtil; import nlib.util.StringUtil;
/** /**
* <pre> * <pre>
* @Class Name : DataApiInterface.java * @Class Name : DataApiInterface.java
* *
* @Description : DAO에서 상속할 DataApi의 부모 클래스들을 위한 인터페이스 * @Description : DAO에서 상속할 DataApi의 부모 클래스들을 위한 인터페이스
* *
* *
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021) * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
* *
* </pre> * </pre>
* *
* @ ------------ -------- --------------------------- * @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용 * @ 수정일 수정자 수정내용
* @ ------------ -------- --------------------------- * @ ------------ -------- ---------------------------
* @ 2021. 7. 9. KNKIM 최초 생성 * @ 2021. 7. 9. KNKIM 최초 생성
* *
* *
* @author 이씨플라자 * DIGITALSHIP KNKIM * @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 9. * @since 2021. 7. 9.
* @version 1.0 * @version 1.0
* *
*/ */
public interface DataApiInterface { public interface DataApiInterface {
static final Logger log = LoggerFactory.getLogger(DataApiInterface.class); static final Logger log = LoggerFactory.getLogger(DataApiInterface.class);
/** /**
* 조회 * 조회
* *
* @param reqVO * @param reqVO
* @return * @return
*/ */
public DataApiResVO get(DataApiReqVO reqVO); public DataApiResVO get(DataApiReqVO reqVO);
/** /**
* 등록 * 등록
* *
* @param reqVO * @param reqVO
* @return * @return
*/ */
public DataApiResVO put(DataApiReqVO reqVO); public DataApiResVO put(DataApiReqVO reqVO);
/** /**
* 수정 * 수정
* *
* @param reqVO * @param reqVO
* @return * @return
*/ */
public DataApiResVO post(DataApiReqVO reqVO); public DataApiResVO post(DataApiReqVO reqVO);
/** /**
* 삭제 * 삭제
* *
* @param reqVO * @param reqVO
* @return * @return
*/ */
public DataApiResVO delete (DataApiReqVO reqVO); public DataApiResVO delete (DataApiReqVO reqVO);
/** /**
* 실제 RESTful API 서버로 요청을 전송하고, 응답받은 자료를 응답VO에 담아서 리턴한다. * 실제 RESTful API 서버로 요청을 전송하고, 응답받은 자료를 응답VO에 담아서 리턴한다.
* *
* @param reqVO * @param reqVO
* @param method * @param method
* @return * @return
*/ */
public DataApiResVO send(DataApiReqVO reqVO, HttpMethod method); public DataApiResVO send(DataApiReqVO reqVO, HttpMethod method);
/** /**
* 요청 VO를 Map 형태로 변환한다. * 요청 VO를 Map 형태로 변환한다.
* *
* @param reqVO * @param reqVO
* @return * @return
*/ */
public static MultiValueMap<String, String> makeParamMap(DataApiReqVO reqVO) { public static MultiValueMap<String, String> makeParamMap(DataApiReqVO reqVO) {
MultiValueMap<String, String> map = new LinkedMultiValueMap<>(); MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
// 공통 // 공통
map.add("authKey", reqVO.getAuthKey()); map.add("authKey", reqVO.getAuthKey());
map.add("rows", "" + reqVO.getPageRows()); map.add("rows", "" + reqVO.getPageRows());
map.add("page", "" + reqVO.getPageNo()); map.add("page", "" + reqVO.getPageNo());
// 추가 정보 // 추가 정보
if(reqVO.hasInfo()) { if(reqVO.hasInfo()) {
HashMap<String, Object> info = reqVO.getInfo(); HashMap<String, Object> info = reqVO.getInfo();
for(String key : info.keySet()) { for(String key : info.keySet()) {
Object val = info.get(key); Object val = info.get(key);
if(val instanceof HashMap) { if(val instanceof HashMap) {
HashMap<String, String> subInfo = (HashMap)val; HashMap<String, String> subInfo = (HashMap)val;
for(String subKey : subInfo.keySet()) { for(String subKey : subInfo.keySet()) {
String subVal = subInfo.get(subKey); String subVal = subInfo.get(subKey);
map.add(subKey, subVal); map.add(subKey, subVal);
} }
} else { } else {
map.add(key, (String)val); map.add(key, (String)val);
} }
} }
} }
return map; // 요청 파라메타 확인
} 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 { *
* @param reqVO
if(reqVO == null) { * @return
return new DataApiResVO("ERR_NO_REQ", "데이터송수신 요청객체가 존재하지 않습니다."); * @throws Exception
} */
public static DataApiResVO checkReqCommonParams(DataApiReqVO reqVO) throws Exception {
if(StringUtil.isEmpty(reqVO.getReqUrl())) {
return new DataApiResVO("ERR_NO_RURL", "데이터 요청 업무ID에 대한 URL/RUI 정보가 존재하지 않습니다."); if(reqVO == null) {
} return new DataApiResVO("ERR_NO_REQ", "데이터송수신 요청객체가 존재하지 않습니다.");
if(StringUtil.isEmpty(reqVO.getAuthKey())) { }
return new DataApiResVO("ERR_NO_AUTHKEY", "데이터 요청에 대한 권한키 정보가 존재하지 않습니다.");
} if(StringUtil.isEmpty(reqVO.getReqUrl())) {
return new DataApiResVO("ERR_NO_RURL", "데이터 요청 업무ID에 대한 URL/RUI 정보가 존재하지 않습니다.");
return null; }
} if(StringUtil.isEmpty(reqVO.getAuthKey())) {
return new DataApiResVO("ERR_NO_AUTHKEY", "데이터 요청에 대한 권한키 정보가 존재하지 않습니다.");
/** }
* 처리결과 정보를 입력받아 DataApiResVO를 생성한다.
* return null;
* @param resultCode }
* @param resultMessage
* @return /**
*/ * 처리결과 정보를 입력받아 DataApiResVO를 생성한다.
public static DataApiResVO makeErrorRes(String resultCode, String resultMessage) { *
return new DataApiResVO(resultCode, resultMessage); * @param resultCode
} * @param resultMessage
* @return
/** */
* 응답받은 XML 문자열을 DataApiResVO (내부 Map객체 포함) 객체로 변환하여 리턴한다. public static DataApiResVO makeErrorRes(String resultCode, String resultMessage) {
* return new DataApiResVO(resultCode, resultMessage);
* @param xmlStr }
* @return
*/ /**
public static DataApiResVO convertXmlToResVO(String xmlStr) { * 응답받은 XML 문자열을 DataApiResVO (내부 Map객체 포함) 객체로 변환하여 리턴한다.
*
DataApiResVO resVO = new DataApiResVO(); * @param xmlStr
* @return
XStream magicApi = new XStream(); */
magicApi.registerConverter(new MapEntryConverter()); public static DataApiResVO convertXmlToResVO(String xmlStr) {
magicApi.alias("result", Map.class);
DataApiResVO resVO = new DataApiResVO();
Map<String, Object> map = null;
try { XStream magicApi = new XStream();
map = (Map<String, Object>) magicApi.fromXML(xmlStr); magicApi.registerConverter(new MapEntryConverter());
} catch(Exception e) { magicApi.alias("result", Map.class);
e.printStackTrace();
Map<String, Object> map = null;
resVO.setResultCode("ERR_RES_XML_FORMAT"); try {
resVO.setResultMessage(String.format("올바르지 않은 XML 형식의 응답입니다. : [%s]", xmlStr)); map = (Map<String, Object>) magicApi.fromXML(xmlStr);
} catch(Exception e) {
return resVO; e.printStackTrace();
}
resVO.setResultCode("ERR_RES_XML_FORMAT");
// 처리결과 확인 resVO.setResultMessage(String.format("올바르지 않은 XML 형식의 응답입니다. : [%s]", xmlStr));
String commonKeyList = "|resulttype|code|message|page|totpages|records|".toLowerCase();
String lowerKey = null; return resVO;
for( String key : map.keySet()) { }
lowerKey = key.toLowerCase(); // 처리결과 확인
if(commonKeyList.contains("|" + lowerKey + "|")) { String commonKeyList = "|resulttype|code|message|page|totpages|records|".toLowerCase();
String lowerKey = null;
if(lowerKey.equals("resulttype")) { for( String key : map.keySet()) {
String resultType = (String)map.get(key);
if(!StringUtil.isEmpty(resultType) && resultType.toLowerCase().compareTo("success") == 0) { lowerKey = key.toLowerCase();
resVO.setResultCode("S0000"); if(commonKeyList.contains("|" + lowerKey + "|")) {
}
} if(lowerKey.equals("resulttype")) {
String resultType = (String)map.get(key);
if(lowerKey.equals("code")) { if(!StringUtil.isEmpty(resultType) && resultType.toLowerCase().compareTo("success") == 0) {
String code = (String)map.get(key); resVO.setResultCode("S0000");
int codeInt = 0; }
try { }
codeInt = Integer.parseInt(code);
} catch(Exception e) { if(lowerKey.equals("code")) {
log.error("회신 code 정보를 정수로 변환처리 중 오류가 발생하였습니다." + e.toString()); String code = (String)map.get(key);
codeInt = -1; int codeInt = 0;
} try {
codeInt = Integer.parseInt(code);
if(codeInt != 0) { } catch(Exception e) {
resVO.setResultCode(String.format("ERR_BIZERR(%s)", code)); log.error("회신 code 정보를 정수로 변환처리 중 오류가 발생하였습니다." + e.toString());
} else { codeInt = -1;
resVO.setResultCode("S0000"); }
}
} if(codeInt != 0) {
resVO.setResultCode(String.format("ERR_BIZERR(%s)", code));
if(lowerKey.equals("message")) { } else {
resVO.setResultMessage((String)map.get(key)); resVO.setResultCode("S0000");
} }
}
if(lowerKey.equals("page")) {
resVO.setPageNo(StringUtil.toNumber((String)map.get(key))); if(lowerKey.equals("message")) {
} resVO.setResultMessage((String)map.get(key));
}
if(lowerKey.equals("totpages")) {
resVO.setPageTotCount(StringUtil.toNumber((String)map.get(key))); if(lowerKey.equals("page")) {
} resVO.setPageNo(StringUtil.toNumber((String)map.get(key)));
}
if(lowerKey.equals("records")) {
resVO.setRecordTotCount(StringUtil.toNumber((String)map.get(key), 0)); if(lowerKey.equals("totpages")) {
} resVO.setPageTotCount(StringUtil.toNumber((String)map.get(key)));
} else { }
if(resVO.getInfo() == null) resVO.setInfo(new HashMap<String,Object>());
HashMap<String,Object> info = resVO.getInfo(); if(lowerKey.equals("records")) {
info.put(key, map.get(key)); resVO.setRecordTotCount(StringUtil.toNumber((String)map.get(key), 0));
} }
} } else {
if(resVO.getInfo() == null) resVO.setInfo(new HashMap<String,Object>());
return resVO; 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; package nlib.security;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 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.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity; 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.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import nlib.cmm.crypto.NlibPasswordEncoder; import nlib.cmm.crypto.NlibPasswordEncoder;
/** /**
* <pre> * <pre>
* @Class Name : SpringSecurityConfig.java * @Class Name : SpringSecurityConfig.java
* *
* @Description : Spring Security 환경설정 클래스 * @Description : Spring Security 환경설정 클래스
* *
* *
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021) * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
* *
* </pre> * </pre>
* *
* @ ------------ -------- --------------------------- * @ ------------ -------- ---------------------------
* @ 수정일 수정자 수정내용 * @ 수정일 수정자 수정내용
* @ ------------ -------- --------------------------- * @ ------------ -------- ---------------------------
* @ 2021. 7. 6. KNKIM 최초 생성 * @ 2021. 7. 6. KNKIM 최초 생성
* *
* *
* @author 이씨플라자 * DIGITALSHIP KNKIM * @author 이씨플라자 * DIGITALSHIP KNKIM
* @since 2021. 7. 6. * @since 2021. 7. 6.
* @version 1.0 * @version 1.0
* *
*/ */
@Configuration @Configuration
@EnableWebSecurity @EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true) @EnableGlobalMethodSecurity(securedEnabled = true)
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override @Override
public void configure(WebSecurity web) throws Exception { public void configure(WebSecurity web) throws Exception {
web.ignoring() web.ignoring()
.antMatchers("/resources/**") .antMatchers("/resources/**")
.antMatchers("/css/**") .antMatchers("/css/**")
.antMatchers("/images/**") .antMatchers("/images/**")
.antMatchers("/js/**") .antMatchers("/js/**")
.antMatchers("/temp/**") .antMatchers("/temp/**")
.antMatchers("/favicon/**") .antMatchers("/favicon/**")
.antMatchers("/*/*Ajax.do") .antMatchers("/*/*Ajax.do")
; ;
} }
@Override @Override
protected void configure(HttpSecurity http) throws Exception { protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests() http.authorizeRequests()
.antMatchers("/login/login*.do").permitAll() .antMatchers("/login/login*.do").permitAll()
.antMatchers("/login/logout*.do").permitAll() .antMatchers("/login/logout*.do").permitAll()
.antMatchers("/info/inform/*.do").permitAll() .antMatchers("/info/inform/*.do").permitAll()
.antMatchers("/").permitAll() .antMatchers("/").permitAll()
.antMatchers("/index.jsp").permitAll() .antMatchers("/index.jsp").permitAll()
.antMatchers("/index.do").permitAll() .antMatchers("/index.do").permitAll()
.antMatchers("/main/header.do").permitAll() .antMatchers("/main/header.do").permitAll()
.antMatchers("/main/menu.do").permitAll() .antMatchers("/main/menu.do").permitAll()
.antMatchers("/sample/password/getSampleEncoder.do").permitAll() .antMatchers("/sample/password/getSampleEncoder.do").permitAll()
.anyRequest().authenticated() .anyRequest().authenticated()
.and().formLogin() .and().formLogin()
.loginPage("/login/loginForm.do") .loginPage("/login/loginForm.do")
.permitAll() .permitAll()
.and().csrf() .and().csrf()
.disable(); .disable();
http.logout() http.logout()
.logoutSuccessUrl("/login/loginForm.do?logout") .logoutSuccessUrl("/login/loginForm.do?logout")
.invalidateHttpSession(true).deleteCookies("JSESSIONID") .invalidateHttpSession(true).deleteCookies("JSESSIONID")
; ;
} }
@Bean @Bean
@Override @Override
public AuthenticationManager authenticationManagerBean() throws Exception { public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean(); return super.authenticationManagerBean();
} }
@Bean @Bean
public UserDetailsService userDetailsService() { public UserDetailsService userDetailsService() {
return new SecUserDetailsService(); return new SecUserDetailsService();
} }
@Bean @Bean
public PasswordEncoder getPasswordEncoder() { public PasswordEncoder getPasswordEncoder() {
return new NlibPasswordEncoder(); 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; package nlib.util;
import egovframework.com.utl.fcc.service.EgovStringUtil; import java.sql.Timestamp;
import java.text.SimpleDateFormat;
/** import java.util.Locale;
* <pre>
* @Class Name : StringUtil.java import egovframework.com.utl.fcc.service.EgovStringUtil;
*
* @Description : 문자열 관련 공통 함수 모음 /**
* * <pre>
* * @Class Name : StringUtil.java
* @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021) *
* * @Description : 문자열 관련 공통 함수 모음
* </pre> *
* *
* @ ------------ -------- --------------------------- * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
* @ 수정일 수정자 수정내용 *
* @ ------------ -------- --------------------------- * </pre>
* @ 2021. 6. 22. KNKIM 최초 생성 *
* * @ ------------ -------- ---------------------------
* * @ 수정일 수정자 수정내용
* @author 이씨플라자 * DIGITALSHIP KNKIM * @ ------------ -------- ---------------------------
* @since 2021. 6. 22. * @ 2021. 6. 22. KNKIM 최초 생성
* @version 1.0 *
* *
*/ * @author 이씨플라자 * DIGITALSHIP KNKIM
public class StringUtil extends EgovStringUtil { * @since 2021. 6. 22.
* @version 1.0
/** *
* Null 이거나, 빈문자열(공백 포함) 경우, true를 리턴한다. */
* public class StringUtil extends EgovStringUtil {
* @param str
* @return /**
*/ * Null 이거나, 빈문자열(공백 포함) 경우, true를 리턴한다.
public static boolean isEmpty(String str) { *
return str == null || str.trim().length() == 0; * @param str
} * @return
*/
/** public static boolean isEmpty(String str) {
* 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, -1을 리턴한다. return str == null || str.trim().length() == 0;
* }
* @param str
* @return /**
*/ * 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, -1을 리턴한다.
public static int toNumber(String str) { *
return toNumber(str, -1); * @param str
} * @return
*/
/** public static int toNumber(String str) {
* 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, 기본값 정보 defaultInt를 리턴한다. return toNumber(str, -1);
* }
* @param str
* @param defaultInt /**
* @return * 문자열을 정수형으로 변환하여 리턴한다. 만일 문자열이 null 또는 문자열인 경우, 기본값 정보 defaultInt를 리턴한다.
*/ *
public static int toNumber(String str, int defaultInt) { * @param str
if(isEmpty(str)) return defaultInt; * @param defaultInt
* @return
try { */
return Integer.parseInt(str.trim()); public static int toNumber(String str, int defaultInt) {
} catch(Exception e) {} if(isEmpty(str)) return defaultInt;
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"?> <?xml version="1.0" encoding="UTF-8"?>
<beans <beans
xmlns="http://www.springframework.org/schema/beans" xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=" xmlns:util="http://www.springframework.org/schema/util"
http://www.springframework.org/schema/beans xsi:schemaLocation="
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/beans
http://www.springframework.org/schema/util http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/util/spring-util-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
<context:component-scan base-package="egovframework, nlib"> http://www.springframework.org/schema/util/spring-util-4.0.xsd
<!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> --> ">
</context:component-scan>
<context:component-scan base-package="egovframework, nlib">
<context:annotation-config /> <!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> -->
</context:component-scan>
<!-- NLIB PROPERTIES 추가 (DIGITALSHIP 2021.06.17) -->
<util:properties id="properties" location="classpath:nlib/nlib.properties" /> <context:annotation-config />
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- NLIB PROPERTIES 추가 (DIGITALSHIP 2021.06.17) -->
<property name="basenames"> <util:properties id="properties" location="classpath:nlib/nlib.properties" />
<list>
<value>classpath:/egovframework/message/message-common</value> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value> <property name="basenames">
<value>classpath:/egovframework/rte/fdl/property/messages/properties</value> <list>
</list> <value>classpath:/egovframework/message/message-common</value>
</property> <value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
<property name="cacheSeconds"> <value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
<value>60</value> </list>
</property> </property>
</bean> <property name="cacheSeconds">
<value>60</value>
<bean id="leaveaTrace" class="egovframework.rte.fdl.cmmn.trace.LeaveaTrace"> </property>
<property name="traceHandlerServices"> </bean>
<list>
<ref bean="traceHandlerService" /> <bean id="leaveaTrace" class="egovframework.rte.fdl.cmmn.trace.LeaveaTrace">
</list> <property name="traceHandlerServices">
</property> <list>
</bean> <ref bean="traceHandlerService" />
</list>
<bean id="traceHandlerService" class="egovframework.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager"> </property>
<property name="reqExpMatcher"> </bean>
<ref bean="antPathMater" />
</property> <bean id="traceHandlerService" class="egovframework.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager">
<property name="patterns"> <property name="reqExpMatcher">
<list> <ref bean="antPathMater" />
<value>*</value> </property>
</list> <property name="patterns">
</property> <list>
<property name="handlers"> <value>*</value>
<list> </list>
<ref bean="defaultTraceHandler" /> </property>
</list> <property name="handlers">
</property> <list>
</bean> <ref bean="defaultTraceHandler" />
</list>
<bean id="antPathMater" class="org.springframework.util.AntPathMatcher" /> </property>
<bean id="defaultTraceHandler" class="egovframework.rte.fdl.cmmn.trace.handler.DefaultTraceHandler" /> </bean>
</beans> <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"?> <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <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"> 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"> <!-- <bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory"/> <property name="validatorFactory" ref="validatorFactory"/>
</bean> </bean> -->
<!--
<bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory"> <bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations"> <property name="validationConfigLocations">
<list> <list>
<value>/WEB-INF/config/egovframework/validator/validator-rules.xml</value> <value>/WEB-INF/config/egovframework/validator/validator-rules.xml</value>
<value>/WEB-INF/config/egovframework/validator/validator.xml</value> <value>/WEB-INF/config/egovframework/validator/validator.xml</value>
</list> </list>
</property> </property>
</bean> </bean> -->
</beans> </beans>

View File

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

View File

@ -1,48 +1,48 @@
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# #
# nlib.properties : \uc628\ub77c\uc778\uc790\ub8cc\ub300\ucd9c\uad00\ub9ac\uc2dc\uc2a4\ud15c # 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) # @\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. # 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 # 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 # 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) # 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) # 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 : '/' # 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9 # 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 # 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 # DataAPI \uc811\uc18d\uc815\ubcf4
#---------------------------------------- #----------------------------------------
# \uac1c\ubc1c \uc11c\ubc84 # \uac1c\ubc1c \uc11c\ubc84
#dataapi.server.ip = 210.181.197.70 #dataapi.server.ip = 210.181.197.70
#dataapi.server.port = 80 #dataapi.server.port = 80
#dataapi.server.protocol = http #dataapi.server.protocol = http
# \ub85c\uceec \uc11c\ubc84 # \ub85c\uceec \uc11c\ubc84
dataapi.server.ip = localhost dataapi.server.ip = localhost
dataapi.server.port = 8088 dataapi.server.port = 8088
dataapi.server.protocol = http dataapi.server.protocol = http
# \ub85c\uceec \uac1c\ubc1c\uc6a9 XML \ud30c\uc77c \uc704\uce58 # \ub85c\uceec \uac1c\ubc1c\uc6a9 XML \ud30c\uc77c \uc704\uce58
dataapi.temp.xml.path = C:/iams/workspace/nlib/data/dataxml dataapi.temp.xml.path = C:/iams/workspace/nlib/data/dataxml
# Aria \uc54c\uace0\ub9ac\uc998 # Aria \uc54c\uace0\ub9ac\uc998
crypto.aria.defaultKey = TheFederationOfKoreaCultureCenter027042322 crypto.aria.defaultKey = TheFederationOfKoreaCultureCenter027042322
#---------------------------------------- #----------------------------------------
# \ucca8\ubd80\ud30c\uc77c \uacbd\ub85c \uc815\ubcf4 # \ucca8\ubd80\ud30c\uc77c \uacbd\ub85c \uc815\ubcf4
#---------------------------------------- #----------------------------------------
# \ucca8\ubd80\ud30c\uc77c \ucd5c\uc0c1\uc704 \uc704\uce58 # \ucca8\ubd80\ud30c\uc77c \ucd5c\uc0c1\uc704 \uc704\uce58
fileupload.base.path = C:/iams/workspace/nlib/data/fileupload fileupload.base.path = C:/iams/workspace/nlib/data/fileupload
# \uc784\uc2dc \uc800\uc7a5 \uc704\uce58 # \uc784\uc2dc \uc800\uc7a5 \uc704\uce58
fileupload.temp.subpath = /temp 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 # \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 fileupload.bbs.qna.subpath = /bbs/qna

View File

@ -1,79 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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 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/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"> 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:component-scan base-package="egovframework, nlib">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <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.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan> </context:component-scan>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer"> <property name="webBindingInitializer">
<bean class="egovframework.com.cmm.web.EgovBindingInitializer"/> <bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
</property> </property>
</bean> <!-- @ResponseBody : application/json 변경 (2021.7.20 KKN) -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="messageConverters">
<property name="interceptors"> <list>
<list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<ref bean="localeChangeInterceptor" /> </list>
</list> </property>
</property> </bean>
</bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /> <list>
<!-- 쿠키를 이용한 Locale 이용시 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> --> <ref bean="localeChangeInterceptor" />
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> </list>
<property name="paramName" value="language" /> </property>
</bean> </bean>
<!-- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 쿠키를 이용한 Locale 이용시 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> -->
<property name="defaultErrorView" value="cmmn/egovError"/> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="exceptionMappings"> <property name="paramName" value="language" />
<props> </bean>
<prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">cmmn/egovError</prop>
<prop key="org.springframework.security.AccessDeniedException">cmmn/egovError</prop> <!--
</props> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
</property> <property name="defaultErrorView" value="cmmn/egovError"/>
</bean> <property name="exceptionMappings">
--> <props>
<prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">cmmn/egovError</prop>
<!-- tiles 설정 : 시작 --> <prop key="org.springframework.security.AccessDeniedException">cmmn/egovError</prop>
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> </props>
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" /> </property>
<property name="order" value="1" /> </bean>
</bean> -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions"> <!-- tiles 설정 : 시작 -->
<list> <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<value>/WEB-INF/tiles/tiles-layout.xml</value> <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
</list> <property name="order" value="1" />
</property> </bean>
</bean> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<!-- tiles 설정 : 종료 --> <property name="definitions">
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <list>
<property name="prefix" value="/WEB-INF/jsp/" /> <value>/WEB-INF/tiles/tiles-layout.xml</value>
<property name="suffix" value=".jsp" /> </list>
<property name="order" value="1" /> </property>
</bean> </bean>
<!-- tiles 설정 : 종료 -->
<!-- For Pagination Tag --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<bean id="imageRenderer" class="egovframework.com.cmm.web.EgovImgPaginationRenderer"/> <property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager"> <property name="order" value="1" />
<property name="rendererType"> </bean>
<map>
<entry key="image" value-ref="imageRenderer"/> <!-- For Pagination Tag -->
</map> <bean id="imageRenderer" class="egovframework.com.cmm.web.EgovImgPaginationRenderer"/>
</property>
</bean> <bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
<!-- /For Pagination Tag --> <property name="rendererType">
<map>
<!-- <mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator"/> --> <entry key="image" value-ref="imageRenderer"/>
</map>
</property>
</bean>
<!-- /For Pagination Tag -->
<!-- <mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator"/> -->
</beans> </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"%> <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<ul class="gnb"> <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}/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}/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}/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}/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}/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}/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}/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}/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}/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}/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}/rent/listRequestsForViewingItem.do';">열람요청</a></li>
<li><a href="#" onclick="javascript:location.href='${pageContext.request.contextPath}/col/collection/listInterests.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/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/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}/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"> </ul>
$(function() { <script type="text/javascript">
$(function() {
});
});
</script> </script>

View File

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

View File

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

View File

@ -1,124 +1,125 @@
/********************************************************************************/ /********************************************************************************/
/* */ /* */
/* Design RIAN */ /* Design RIAN */
/* Date : 2007-03-21 */ /* Date : 2007-03-21 */
/* */ /* */
/* */ /* */
/********************************************************************************/ /********************************************************************************/
* {margin:0;padding:0;} * {margin:0;padding:0;}
html { html {
height: 100%; height: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
*, *,
*:before, *:before,
*:after { *:after {
box-sizing: inherit; box-sizing: inherit;
} }
body { body {
position: relative; position: relative;
margin: 0; margin: 0;
padding-bottom: 6rem; padding-bottom: 6rem;
width: 100%; width: 100%;
} }
html, body { height: 100%; } html, body { height: 100%; }
#page-container { #page-container {
padding-op: 150px; padding-op: 150px;
} }
#content-wrap { #content-wrap {
position: relative; position: relative;
display: block; display: block;
padding: 20px; padding: 20px;
top:120px; top:120px;
padding-bottom: 100px; padding-bottom: 100px;
} }
.gnb li { .gnb li {
float: left; float: left;
padding: 0px; padding: 0px;
padding-right: 20px; padding-right: 20px;
} }
.gnb li a { .gnb li a {
color: #fff; color: #fff;
font-weight: 600; font-weight: 600;
font-size: 16px; font-size: 16px;
} }
.gnb-right { .gnb-right {
padding-right: 40px; padding-right: 40px;
position:relative; position:relative;
top:-20px; top:-20px;
} }
.gnb-right li { .gnb-right li {
float: right; float: right;
padding: 0px; padding: 0px;
padding-right: 20px; padding-right: 20px;
color: orange; color: orange;
} }
.gnb-right li a { .gnb-right li a {
color: #333; color: #333;
font-weight: bolder; font-weight: bolder;
font-size: 14px; font-size: 14px;
} }
#header { #header {
width: 100%; width: 100%;
height: 60px; height: 60px;
font-weight:bolder; font-weight:bolder;
position: fixed; position: fixed;
background: #fff; background: #fff;
padding: 20px; padding: 20px;
color: #000; color: #000;
font-weight: 900; font-weight: 900;
font: 16px "Noto Sans KR", sans-serif; font: 16px "Noto Sans KR", sans-serif;
z-index: 10000; z-index: 10000;
} }
#menu { #menu {
width: 100%; width: 100%;
height: 60px; /* Footer height */ height: 60px; /* Footer height */
position: fixed; position: fixed;
top:60px; top:60px;
font-weight:bold; font-weight:bold;
background: #2781C1; background: #2781C1;
padding: 20px; padding: 20px;
z-index: 10000; z-index: 10000;
font: 16px "Noto Sans KR", sans-serif; font: 16px "Noto Sans KR", sans-serif;
} }
#footer { #footer {
margin: 0; margin: 0;
padding: 1rem; padding: 1rem;
color: #AAAAAA; color: #AAAAAA;
background-color: #333333; background-color: #333333;
position: fixed; position: fixed;
width: 100%; width: 100%;
display: block; display: block;
text-align: center; text-align: center;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
bottom: 0; bottom: 0;
} }
ul, ol, li { ul, ol, li {
list-style: none; list-style: none;
} }
a { a {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
background-color: transparent; background-color: transparent;
font: 16px "Noto Sans KR", sans-serif; font: 16px "Noto Sans KR", sans-serif;
color: #333; 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"?> <?xml version="1.0" encoding="UTF-8"?>
<Configuration> <Configuration>
<Appenders> <Appenders>
<Console name="console" target="SYSTEM_OUT"> <Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" /> <PatternLayout pattern="%d %5p [%c] %m%n" />
</Console> </Console>
</Appenders> </Appenders>
<Loggers> <Loggers>
<Logger name="java.sql" level="INFO" additivity="false"> <Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" /> <AppenderRef ref="console" />
</Logger> </Logger>
<Logger name="egovframework" level="DEBUG" additivity="false"> <Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" /> <AppenderRef ref="console" />
</Logger> </Logger>
<!-- log SQL with timing information, post execution --> <!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false"> <Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" /> <AppenderRef ref="console" />
</Logger> </Logger>
<Logger name="org.springframework" level="INFO" additivity="false"> <Logger name="org.springframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" /> <AppenderRef ref="console" />
</Logger> </Logger>
<Root level="DEBUG"> <Root level="DEBUG">
<AppenderRef ref="console" /> <AppenderRef ref="console" />
</Root> </Root>
</Loggers> </Loggers>
</Configuration> </Configuration>